aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio')
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs10
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs54
-rw-r--r--Software/Visual_Studio/Tango.PMR/Common/MessageType.cs164
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireRequest.cs131
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireResponse.cs188
-rw-r--r--Software/Visual_Studio/Tango.PMR/MachineStatus/IDSPackLevel.cs42
-rw-r--r--Software/Visual_Studio/Tango.PMR/MachineStatus/PumpState.cs48
-rw-r--r--Software/Visual_Studio/Tango.PMR/MachineStatus/PumpStatus.cs246
-rw-r--r--Software/Visual_Studio/Tango.PMR/MachineStatus/PumpType.cs45
-rw-r--r--Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj7
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryWireStreamingSource.cs67
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj2
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryWire.cs14
13 files changed, 927 insertions, 91 deletions
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs
index c99e83558..0f9f3b008 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs
+++ b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs
@@ -268,6 +268,11 @@ namespace Tango.Integration.Operation
event EventHandler<InkFillingStatusChangedEventArgs> InkFillingStatusChanged;
/// <summary>
+ /// Occurs when a new telemetry wire is available.
+ /// </summary>
+ event EventHandler<StartTelemetryWireResponse> TelemetryWireAvailable;
+
+ /// <summary>
/// Occurs when waste replacement is required.
/// </summary>
event EventHandler WasteReplacementRequired;
@@ -313,6 +318,11 @@ namespace Tango.Integration.Operation
bool EnableInkFillingStatus { get; set; }
/// <summary>
+ /// Gets or set a value indicating whether to enable telemetry flow from the firmware to the cloud.
+ /// </summary>
+ bool EnableTelemetryWire { 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 f77ea978c..eb994afc6 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
+++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
@@ -75,6 +75,7 @@ namespace Tango.Integration.Operation
private bool _debugSent;
private bool _machineStatusSent;
private bool _inkFillingStatusSent;
+ private bool _telemetryWireSent;
private bool _threadLoadingSent;
private bool _isPowerDownRequestInProgress;
private bool _isHeadCleaningInProgress;
@@ -355,6 +356,8 @@ namespace Tango.Integration.Operation
/// </summary>
public event EventHandler WasteReplacementRequired;
+ public event EventHandler<StartTelemetryWireResponse> TelemetryWireAvailable;
+
#endregion
#region Properties
@@ -655,6 +658,22 @@ namespace Tango.Integration.Operation
set { _enablePowerUpSequence = value; RaisePropertyChangedAuto(); }
}
+ private bool _enableTelemetryWire;
+ public bool EnableTelemetryWire
+ {
+ get { return _enableTelemetryWire; }
+ set
+ {
+ if (_enableTelemetryWire != value)
+ {
+ _enableTelemetryWire = value;
+ RaisePropertyChangedAuto();
+ OnEnableTelemetryWireChanged(value);
+ }
+ }
+ }
+
+
/// <summary>
/// Gets or sets the machine events state provider used to get notifications about current machine events and errors.
/// </summary>
@@ -778,6 +797,33 @@ namespace Tango.Integration.Operation
}
}
+ private void OnEnableTelemetryWireChanged(bool value)
+ {
+ if (value && State == TransportComponentState.Connected && !_telemetryWireSent)
+ {
+ var request = new StartTelemetryWireRequest();
+
+ _telemetryWireSent = true;
+
+ LogManager.Log($"Sending '{nameof(StartTelemetryWireRequest)}'...");
+
+ SendContinuousRequest<StartTelemetryWireRequest, StartTelemetryWireResponse>(request, new TransportContinuousRequestConfig() { ShouldLog = false }).ObserveOn(new NewThreadScheduler()).Subscribe(
+ (response) =>
+ {
+ OnTelemetryWireAvailable(response);
+ },
+ (ex) =>
+ {
+ _telemetryWireSent = false;
+ },
+ () =>
+ {
+ _telemetryWireSent = false;
+ LogManager.Log("Telemetry Wire response completed!?", LogCategory.Warning);
+ });
+ }
+ }
+
/// <summary>
/// Called when the enable events property has been changed.
/// </summary>
@@ -1028,6 +1074,11 @@ namespace Tango.Integration.Operation
DiagnosticsDataAvailable?.Invoke(this, data);
}
+ private void OnTelemetryWireAvailable(StartTelemetryWireResponse response)
+ {
+ TelemetryWireAvailable?.Invoke(this, response);
+ }
+
/// <summary>
/// Called when events notification message has been received.
/// </summary>
@@ -1491,6 +1542,7 @@ namespace Tango.Integration.Operation
_debugSent = false;
_eventsSent = false;
_machineStatusSent = false;
+ _telemetryWireSent = false;
//MachineStatus = null;
@@ -1593,6 +1645,7 @@ namespace Tango.Integration.Operation
_eventsSent = false;
_debugSent = false;
_machineStatusSent = false;
+ _telemetryWireSent = false;
_bitResults = null;
@@ -1602,6 +1655,7 @@ namespace Tango.Integration.Operation
OnEnableMachineStatusUpdatesChanged(EnableMachineStatusUpdates);
OnEnableAutomaticThreadLoadingChanged(EnableAutomaticThreadLoading);
OnEnableInkFillingStatus(EnableInkFillingStatus);
+ OnEnableTelemetryWireChanged(EnableTelemetryWire);
if (EnablePowerUpSequence)
{
diff --git a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs
index b561ccc15..981ffe4f4 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(
- "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbiqiRQoLTWVz",
+ "ChFNZXNzYWdlVHlwZS5wcm90bxIQVGFuZ28uUE1SLkNvbW1vbirjRQoLTWVz",
"c2FnZVR5cGUSCAoETm9uZRAAEhEKDUVycm9yUmVzcG9uc2UQARIUChBDYWxj",
"dWxhdGVSZXF1ZXN0EAMSFQoRQ2FsY3VsYXRlUmVzcG9uc2UQBBITCg9Qcm9n",
"cmVzc1JlcXVlc3QQBRIUChBQcm9ncmVzc1Jlc3BvbnNlEAYSHAoYU3R1YkNh",
@@ -142,85 +142,87 @@ namespace Tango.PMR.Common {
"VmFsaWRhdGlvblJlcXVlc3QQ/A8SIAobQ2FydHJpZGdlVmFsaWRhdGlvblJl",
"c3BvbnNlEP0PEhYKEUJpdFJlc3VsdHNSZXF1ZXN0EP4PEhcKEkJpdFJlc3Vs",
"dHNSZXNwb25zZRD/DxIVChBSZXNldENhcmRSZXF1ZXN0EIAQEhYKEVJlc2V0",
- "Q2FyZFJlc3BvbnNlEIEQEg8KCkpvYlJlcXVlc3QQuBcSEAoLSm9iUmVzcG9u",
- "c2UQuRcSFAoPQWJvcnRKb2JSZXF1ZXN0ELoXEhUKEEFib3J0Sm9iUmVzcG9u",
- "c2UQuxcSIwoeVXBsb2FkUHJvY2Vzc1BhcmFtZXRlcnNSZXF1ZXN0ELwXEiQK",
- "H1VwbG9hZFByb2Nlc3NQYXJhbWV0ZXJzUmVzcG9uc2UQvRcSFgoRQ3VycmVu",
- "dEpvYlJlcXVlc3QQvhcSFwoSQ3VycmVudEpvYlJlc3BvbnNlEL8XEhwKF1Jl",
- "c3VtZUN1cnJlbnRKb2JSZXF1ZXN0EMAXEh0KGFJlc3VtZUN1cnJlbnRKb2JS",
- "ZXNwb25zZRDBFxIdChhTdGFydEhlYWRDbGVhbmluZ1JlcXVlc3QQwhcSHgoZ",
- "U3RhcnRIZWFkQ2xlYW5pbmdSZXNwb25zZRDDFxIdChhBYm9ydEhlYWRDbGVh",
- "bmluZ1JlcXVlc3QQxBcSHgoZQWJvcnRIZWFkQ2xlYW5pbmdSZXNwb25zZRDF",
- "FxIWChFKb2JQcmVwYXJlUmVxdWVzdBDGFxIXChJKb2JQcmVwYXJlUmVzcG9u",
- "c2UQxxcSGQoUU3RhcnREZWJ1Z0xvZ1JlcXVlc3QQoB8SGgoVU3RhcnREZWJ1",
- "Z0xvZ1Jlc3BvbnNlEKEfEhgKE1N0b3BEZWJ1Z0xvZ1JlcXVlc3QQoh8SGQoU",
- "U3RvcERlYnVnTG9nUmVzcG9uc2UQox8SHwoaU2V0RGVidWdMb2dDYXRlZ29y",
- "eVJlcXVlc3QQpB8SIAobU2V0RGVidWdMb2dDYXRlZ29yeVJlc3BvbnNlEKUf",
- "EiEKHFNldHVwRGVidWdEaXNyaWJ1dG9yc1JlcXVlc3QQph8SIgodU2V0dXBE",
- "ZWJ1Z0Rpc3JpYnV0b3JzUmVzcG9uc2UQpx8SJwoiVXBsb2FkSGFyZHdhcmVD",
- "b25maWd1cmF0aW9uUmVxdWVzdBCIJxIoCiNVcGxvYWRIYXJkd2FyZUNvbmZp",
- "Z3VyYXRpb25SZXNwb25zZRCJJxIXChJTeXN0ZW1SZXNldFJlcXVlc3QQiicS",
- "GAoTU3lzdGVtUmVzZXRSZXNwb25zZRCLJxIVChBLZWVwQWxpdmVSZXF1ZXN0",
- "EPAuEhYKEUtlZXBBbGl2ZVJlc3BvbnNlEPEuEhMKDkNvbm5lY3RSZXF1ZXN0",
- "EPIuEhQKD0Nvbm5lY3RSZXNwb25zZRDzLhIWChFEaXNjb25uZWN0UmVxdWVz",
- "dBD0LhIXChJEaXNjb25uZWN0UmVzcG9uc2UQ9S4SFgoRRmlsZVVwbG9hZFJl",
- "cXVlc3QQ2DYSFwoSRmlsZVVwbG9hZFJlc3BvbnNlENk2EhsKFkZpbGVDaHVu",
- "a1VwbG9hZFJlcXVlc3QQ2jYSHAoXRmlsZUNodW5rVXBsb2FkUmVzcG9uc2UQ",
- "2zYSGgoVRXhlY3V0ZVByb2Nlc3NSZXF1ZXN0ENw2EhsKFkV4ZWN1dGVQcm9j",
- "ZXNzUmVzcG9uc2UQ3TYSFwoSS2lsbFByb2Nlc3NSZXF1ZXN0EN42EhgKE0tp",
- "bGxQcm9jZXNzUmVzcG9uc2UQ3zYSEgoNQ3JlYXRlUmVxdWVzdBDgNhITCg5D",
- "cmVhdGVSZXNwb25zZRDhNhISCg1EZWxldGVSZXF1ZXN0EOI2EhMKDkRlbGV0",
- "ZVJlc3BvbnNlEOM2EhoKFUdldFN0b3JhZ2VJbmZvUmVxdWVzdBDkNhIbChZH",
- "ZXRTdG9yYWdlSW5mb1Jlc3BvbnNlEOU2EhQKD0dldEZpbGVzUmVxdWVzdBDm",
- "NhIVChBHZXRGaWxlc1Jlc3BvbnNlEOc2EhgKE0ZpbGVEb3dubG9hZFJlcXVl",
- "c3QQ6DYSGQoURmlsZURvd25sb2FkUmVzcG9uc2UQ6TYSHQoYRmlsZUNodW5r",
- "RG93bmxvYWRSZXF1ZXN0EOo2Eh4KGUZpbGVDaHVua0Rvd25sb2FkUmVzcG9u",
- "c2UQ6zYSGwoWVmFsaWRhdGVWZXJzaW9uUmVxdWVzdBDsNhIcChdWYWxpZGF0",
- "ZVZlcnNpb25SZXNwb25zZRDtNhIbChZBY3RpdmF0ZVZlcnNpb25SZXF1ZXN0",
- "EO42EhwKF0FjdGl2YXRlVmVyc2lvblJlc3BvbnNlEO82EiEKHEdldFZlcnNp",
- "b25EZXNjcmlwdG9yc1JlcXVlc3QQ8DYSIgodR2V0VmVyc2lvbkRlc2NyaXB0",
- "b3JzUmVzcG9uc2UQ8TYSGQoURGlzcGVuc2VyRGF0YVJlcXVlc3QQwD4SGgoV",
- "RGlzcGVuc2VyRGF0YVJlc3BvbnNlEME+EhwKF01pZFRhbmtEYXRhU2V0dXBS",
- "ZXF1ZXN0EMI+Eh0KGE1pZFRhbmtEYXRhU2V0dXBSZXNwb25zZRDDPhIiCh1N",
- "YWNoaW5lQ2FsaWJyYXRpb25EYXRhUmVxdWVzdBDEPhIjCh5NYWNoaW5lQ2Fs",
- "aWJyYXRpb25EYXRhUmVzcG9uc2UQxT4SHgoZTWFpbkNhcmRTdG9yZWREYXRh",
- "UmVxdWVzdBDGPhIfChpNYWluQ2FyZFN0b3JlZERhdGFSZXNwb25zZRDHPhIk",
- "Ch9TdGFydE1hY2hpbmVTdGF0dXNVcGRhdGVSZXF1ZXN0EKhGEiUKIFN0YXJ0",
- "TWFjaGluZVN0YXR1c1VwZGF0ZVJlc3BvbnNlEKlGEiMKHlN0b3BNYWNoaW5l",
- "U3RhdHVzVXBkYXRlUmVxdWVzdBCqRhIkCh9TdG9wTWFjaGluZVN0YXR1c1Vw",
- "ZGF0ZVJlc3BvbnNlEKtGEiEKHFNldElua0F1dG9GaWxsaW5nTW9kZVJlcXVl",
- "c3QQrEYSIgodU2V0SW5rQXV0b0ZpbGxpbmdNb2RlUmVzcG9uc2UQrUYSHAoX",
- "U3Bvb2xUeXBlQ2hhbmdlZFJlcXVlc3QQrkYSHQoYU3Bvb2xUeXBlQ2hhbmdl",
- "ZFJlc3BvbnNlEK9GEhwKF1NldFBvd2VyRG93blRpbWVSZXF1ZXN0ELBGEh0K",
- "GFNldFBvd2VyRG93blRpbWVSZXNwb25zZRCxRhIdChhTZXRCdXp6ZXJTZXR0",
- "aW5nc1JlcXVlc3QQskYSHgoZU2V0QnV6emVyU2V0dGluZ3NSZXNwb25zZRCz",
- "RhIeChlTZXRXaGl0ZVRocmVhZFNraXBSZXF1ZXN0ELRGEh8KGlNldFdoaXRl",
- "VGhyZWFkU2tpcFJlc3BvbnNlELVGEhoKFVN0YXJ0UG93ZXJEb3duUmVxdWVz",
- "dBCQThIbChZTdGFydFBvd2VyRG93blJlc3BvbnNlEJFOEhoKFUFib3J0UG93",
- "ZXJEb3duUmVxdWVzdBCSThIbChZBYm9ydFBvd2VyRG93blJlc3BvbnNlEJNO",
- "EhgKE1N0YXJ0UG93ZXJVcFJlcXVlc3QQlE4SGQoUU3RhcnRQb3dlclVwUmVz",
- "cG9uc2UQlU4SGAoTQWJvcnRQb3dlclVwUmVxdWVzdBCWThIZChRBYm9ydFBv",
- "d2VyVXBSZXNwb25zZRCXThITCg5TdGFuZEJ5UmVxdWVzdBCYThIUCg9TdGFu",
- "ZEJ5UmVzcG9uc2UQmU4SHgoZU3RhcnRUaHJlYWRMb2FkaW5nUmVxdWVzdBD4",
- "VRIfChpTdGFydFRocmVhZExvYWRpbmdSZXNwb25zZRD5VRIhChxDb250aW51",
- "ZVRocmVhZExvYWRpbmdSZXF1ZXN0EPpVEiIKHUNvbnRpbnVlVGhyZWFkTG9h",
- "ZGluZ1Jlc3BvbnNlEPtVEh0KGFN0b3BUaHJlYWRMb2FkaW5nUmVxdWVzdBD8",
- "VRIeChlTdG9wVGhyZWFkTG9hZGluZ1Jlc3BvbnNlEP1VEhwKF1RyeVRocmVh",
- "ZExvYWRpbmdSZXF1ZXN0EP5VEh0KGFRyeVRocmVhZExvYWRpbmdSZXNwb25z",
- "ZRD/VRIgChtBdHRlbXB0VGhyZWFkSm9nZ2luZ1JlcXVlc3QQgFYSIQocQXR0",
- "ZW1wdFRocmVhZEpvZ2dpbmdSZXNwb25zZRCBVhIeChlBYm9ydFRocmVhZExv",
- "YWRpbmdSZXF1ZXN0EIJWEh8KGkFib3J0VGhyZWFkTG9hZGluZ1Jlc3BvbnNl",
- "EINWEiEKHFN0YXJ0SW5rRmlsbGluZ1N0YXR1c1JlcXVlc3QQ4F0SIgodU3Rh",
- "cnRJbmtGaWxsaW5nU3RhdHVzUmVzcG9uc2UQ4V0SHgoZSW5pdGlhdGVJbmtG",
- "aWxsaW5nUmVxdWVzdBDiXRIfChpJbml0aWF0ZUlua0ZpbGxpbmdSZXNwb25z",
- "ZRDjXRIYChNXYXN0ZVJlcGxhY2VSZXF1ZXN0EORdEhkKFFdhc3RlUmVwbGFj",
- "ZVJlc3BvbnNlEOVdEhwKF1NldEplcnJpY2FuTGV2ZWxSZXF1ZXN0EOZdEh0K",
- "GFNldEplcnJpY2FuTGV2ZWxSZXNwb25zZRDnXRIcChdQdXREYXRhU3RvcmVJ",
- "dGVtUmVxdWVzdBDIZRIdChhQdXREYXRhU3RvcmVJdGVtUmVzcG9uc2UQyWUS",
- "HAoXR2V0RGF0YVN0b3JlSXRlbVJlcXVlc3QQymUSHQoYR2V0RGF0YVN0b3Jl",
- "SXRlbVJlc3BvbnNlEMtlEiEKHERhdGFTdG9yZUl0ZW1Nb2RpZmllZFJlcXVl",
- "c3QQzGUSIgodRGF0YVN0b3JlSXRlbU1vZGlmaWVkUmVzcG9uc2UQzWVCHAoa",
- "Y29tLnR3aW5lLnRhbmdvLnBtci5jb21tb25iBnByb3RvMw=="));
+ "Q2FyZFJlc3BvbnNlEIEQEh4KGVN0YXJ0VGVsZW1ldHJ5V2lyZVJlcXVlc3QQ",
+ "ghASHwoaU3RhcnRUZWxlbWV0cnlXaXJlUmVzcG9uc2UQgxASDwoKSm9iUmVx",
+ "dWVzdBC4FxIQCgtKb2JSZXNwb25zZRC5FxIUCg9BYm9ydEpvYlJlcXVlc3QQ",
+ "uhcSFQoQQWJvcnRKb2JSZXNwb25zZRC7FxIjCh5VcGxvYWRQcm9jZXNzUGFy",
+ "YW1ldGVyc1JlcXVlc3QQvBcSJAofVXBsb2FkUHJvY2Vzc1BhcmFtZXRlcnNS",
+ "ZXNwb25zZRC9FxIWChFDdXJyZW50Sm9iUmVxdWVzdBC+FxIXChJDdXJyZW50",
+ "Sm9iUmVzcG9uc2UQvxcSHAoXUmVzdW1lQ3VycmVudEpvYlJlcXVlc3QQwBcS",
+ "HQoYUmVzdW1lQ3VycmVudEpvYlJlc3BvbnNlEMEXEh0KGFN0YXJ0SGVhZENs",
+ "ZWFuaW5nUmVxdWVzdBDCFxIeChlTdGFydEhlYWRDbGVhbmluZ1Jlc3BvbnNl",
+ "EMMXEh0KGEFib3J0SGVhZENsZWFuaW5nUmVxdWVzdBDEFxIeChlBYm9ydEhl",
+ "YWRDbGVhbmluZ1Jlc3BvbnNlEMUXEhYKEUpvYlByZXBhcmVSZXF1ZXN0EMYX",
+ "EhcKEkpvYlByZXBhcmVSZXNwb25zZRDHFxIZChRTdGFydERlYnVnTG9nUmVx",
+ "dWVzdBCgHxIaChVTdGFydERlYnVnTG9nUmVzcG9uc2UQoR8SGAoTU3RvcERl",
+ "YnVnTG9nUmVxdWVzdBCiHxIZChRTdG9wRGVidWdMb2dSZXNwb25zZRCjHxIf",
+ "ChpTZXREZWJ1Z0xvZ0NhdGVnb3J5UmVxdWVzdBCkHxIgChtTZXREZWJ1Z0xv",
+ "Z0NhdGVnb3J5UmVzcG9uc2UQpR8SIQocU2V0dXBEZWJ1Z0Rpc3JpYnV0b3Jz",
+ "UmVxdWVzdBCmHxIiCh1TZXR1cERlYnVnRGlzcmlidXRvcnNSZXNwb25zZRCn",
+ "HxInCiJVcGxvYWRIYXJkd2FyZUNvbmZpZ3VyYXRpb25SZXF1ZXN0EIgnEigK",
+ "I1VwbG9hZEhhcmR3YXJlQ29uZmlndXJhdGlvblJlc3BvbnNlEIknEhcKElN5",
+ "c3RlbVJlc2V0UmVxdWVzdBCKJxIYChNTeXN0ZW1SZXNldFJlc3BvbnNlEIsn",
+ "EhUKEEtlZXBBbGl2ZVJlcXVlc3QQ8C4SFgoRS2VlcEFsaXZlUmVzcG9uc2UQ",
+ "8S4SEwoOQ29ubmVjdFJlcXVlc3QQ8i4SFAoPQ29ubmVjdFJlc3BvbnNlEPMu",
+ "EhYKEURpc2Nvbm5lY3RSZXF1ZXN0EPQuEhcKEkRpc2Nvbm5lY3RSZXNwb25z",
+ "ZRD1LhIWChFGaWxlVXBsb2FkUmVxdWVzdBDYNhIXChJGaWxlVXBsb2FkUmVz",
+ "cG9uc2UQ2TYSGwoWRmlsZUNodW5rVXBsb2FkUmVxdWVzdBDaNhIcChdGaWxl",
+ "Q2h1bmtVcGxvYWRSZXNwb25zZRDbNhIaChVFeGVjdXRlUHJvY2Vzc1JlcXVl",
+ "c3QQ3DYSGwoWRXhlY3V0ZVByb2Nlc3NSZXNwb25zZRDdNhIXChJLaWxsUHJv",
+ "Y2Vzc1JlcXVlc3QQ3jYSGAoTS2lsbFByb2Nlc3NSZXNwb25zZRDfNhISCg1D",
+ "cmVhdGVSZXF1ZXN0EOA2EhMKDkNyZWF0ZVJlc3BvbnNlEOE2EhIKDURlbGV0",
+ "ZVJlcXVlc3QQ4jYSEwoORGVsZXRlUmVzcG9uc2UQ4zYSGgoVR2V0U3RvcmFn",
+ "ZUluZm9SZXF1ZXN0EOQ2EhsKFkdldFN0b3JhZ2VJbmZvUmVzcG9uc2UQ5TYS",
+ "FAoPR2V0RmlsZXNSZXF1ZXN0EOY2EhUKEEdldEZpbGVzUmVzcG9uc2UQ5zYS",
+ "GAoTRmlsZURvd25sb2FkUmVxdWVzdBDoNhIZChRGaWxlRG93bmxvYWRSZXNw",
+ "b25zZRDpNhIdChhGaWxlQ2h1bmtEb3dubG9hZFJlcXVlc3QQ6jYSHgoZRmls",
+ "ZUNodW5rRG93bmxvYWRSZXNwb25zZRDrNhIbChZWYWxpZGF0ZVZlcnNpb25S",
+ "ZXF1ZXN0EOw2EhwKF1ZhbGlkYXRlVmVyc2lvblJlc3BvbnNlEO02EhsKFkFj",
+ "dGl2YXRlVmVyc2lvblJlcXVlc3QQ7jYSHAoXQWN0aXZhdGVWZXJzaW9uUmVz",
+ "cG9uc2UQ7zYSIQocR2V0VmVyc2lvbkRlc2NyaXB0b3JzUmVxdWVzdBDwNhIi",
+ "Ch1HZXRWZXJzaW9uRGVzY3JpcHRvcnNSZXNwb25zZRDxNhIZChREaXNwZW5z",
+ "ZXJEYXRhUmVxdWVzdBDAPhIaChVEaXNwZW5zZXJEYXRhUmVzcG9uc2UQwT4S",
+ "HAoXTWlkVGFua0RhdGFTZXR1cFJlcXVlc3QQwj4SHQoYTWlkVGFua0RhdGFT",
+ "ZXR1cFJlc3BvbnNlEMM+EiIKHU1hY2hpbmVDYWxpYnJhdGlvbkRhdGFSZXF1",
+ "ZXN0EMQ+EiMKHk1hY2hpbmVDYWxpYnJhdGlvbkRhdGFSZXNwb25zZRDFPhIe",
+ "ChlNYWluQ2FyZFN0b3JlZERhdGFSZXF1ZXN0EMY+Eh8KGk1haW5DYXJkU3Rv",
+ "cmVkRGF0YVJlc3BvbnNlEMc+EiQKH1N0YXJ0TWFjaGluZVN0YXR1c1VwZGF0",
+ "ZVJlcXVlc3QQqEYSJQogU3RhcnRNYWNoaW5lU3RhdHVzVXBkYXRlUmVzcG9u",
+ "c2UQqUYSIwoeU3RvcE1hY2hpbmVTdGF0dXNVcGRhdGVSZXF1ZXN0EKpGEiQK",
+ "H1N0b3BNYWNoaW5lU3RhdHVzVXBkYXRlUmVzcG9uc2UQq0YSIQocU2V0SW5r",
+ "QXV0b0ZpbGxpbmdNb2RlUmVxdWVzdBCsRhIiCh1TZXRJbmtBdXRvRmlsbGlu",
+ "Z01vZGVSZXNwb25zZRCtRhIcChdTcG9vbFR5cGVDaGFuZ2VkUmVxdWVzdBCu",
+ "RhIdChhTcG9vbFR5cGVDaGFuZ2VkUmVzcG9uc2UQr0YSHAoXU2V0UG93ZXJE",
+ "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"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.Common.MessageType), }, null));
@@ -431,6 +433,8 @@ namespace Tango.PMR.Common {
[pbr::OriginalName("BitResultsResponse")] BitResultsResponse = 2047,
[pbr::OriginalName("ResetCardRequest")] ResetCardRequest = 2048,
[pbr::OriginalName("ResetCardResponse")] ResetCardResponse = 2049,
+ [pbr::OriginalName("StartTelemetryWireRequest")] StartTelemetryWireRequest = 2050,
+ [pbr::OriginalName("StartTelemetryWireResponse")] StartTelemetryWireResponse = 2051,
/// <summary>
///Printing
/// </summary>
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireRequest.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireRequest.cs
new file mode 100644
index 000000000..352ef2ffa
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireRequest.cs
@@ -0,0 +1,131 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: StartTelemetryWireRequest.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 StartTelemetryWireRequest.proto</summary>
+ public static partial class StartTelemetryWireRequestReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for StartTelemetryWireRequest.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static StartTelemetryWireRequestReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Ch9TdGFydFRlbGVtZXRyeVdpcmVSZXF1ZXN0LnByb3RvEhVUYW5nby5QTVIu",
+ "RGlhZ25vc3RpY3MiGwoZU3RhcnRUZWxlbWV0cnlXaXJlUmVxdWVzdEIhCh9j",
+ "b20udHdpbmUudGFuZ28ucG1yLmRpYWdub3N0aWNzYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.StartTelemetryWireRequest), global::Tango.PMR.Diagnostics.StartTelemetryWireRequest.Parser, null, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class StartTelemetryWireRequest : pb::IMessage<StartTelemetryWireRequest> {
+ private static readonly pb::MessageParser<StartTelemetryWireRequest> _parser = new pb::MessageParser<StartTelemetryWireRequest>(() => new StartTelemetryWireRequest());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<StartTelemetryWireRequest> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Diagnostics.StartTelemetryWireRequestReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartTelemetryWireRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartTelemetryWireRequest(StartTelemetryWireRequest other) : this() {
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartTelemetryWireRequest Clone() {
+ return new StartTelemetryWireRequest(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as StartTelemetryWireRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(StartTelemetryWireRequest 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(StartTelemetryWireRequest 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/Diagnostics/StartTelemetryWireResponse.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireResponse.cs
new file mode 100644
index 000000000..b9155dcb4
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/StartTelemetryWireResponse.cs
@@ -0,0 +1,188 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: StartTelemetryWireResponse.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 StartTelemetryWireResponse.proto</summary>
+ public static partial class StartTelemetryWireResponseReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for StartTelemetryWireResponse.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static StartTelemetryWireResponseReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "CiBTdGFydFRlbGVtZXRyeVdpcmVSZXNwb25zZS5wcm90bxIVVGFuZ28uUE1S",
+ "LkRpYWdub3N0aWNzIjkKGlN0YXJ0VGVsZW1ldHJ5V2lyZVJlc3BvbnNlEgwK",
+ "BE5hbWUYASABKAkSDQoFVmFsdWUYAiABKAJCIQofY29tLnR3aW5lLnRhbmdv",
+ "LnBtci5kaWFnbm9zdGljc2IGcHJvdG8z"));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ 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)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class StartTelemetryWireResponse : pb::IMessage<StartTelemetryWireResponse> {
+ private static readonly pb::MessageParser<StartTelemetryWireResponse> _parser = new pb::MessageParser<StartTelemetryWireResponse>(() => new StartTelemetryWireResponse());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<StartTelemetryWireResponse> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.Diagnostics.StartTelemetryWireResponseReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartTelemetryWireResponse() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartTelemetryWireResponse(StartTelemetryWireResponse other) : this() {
+ name_ = other.name_;
+ value_ = other.value_;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public StartTelemetryWireResponse Clone() {
+ return new StartTelemetryWireResponse(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 StartTelemetryWireResponse);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(StartTelemetryWireResponse 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(StartTelemetryWireResponse 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/IDSPackLevel.cs b/Software/Visual_Studio/Tango.PMR/MachineStatus/IDSPackLevel.cs
index b25739df8..a62f0d261 100644
--- a/Software/Visual_Studio/Tango.PMR/MachineStatus/IDSPackLevel.cs
+++ b/Software/Visual_Studio/Tango.PMR/MachineStatus/IDSPackLevel.cs
@@ -23,18 +23,20 @@ namespace Tango.PMR.MachineStatus {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
"ChJJRFNQYWNrTGV2ZWwucHJvdG8SF1RhbmdvLlBNUi5NYWNoaW5lU3RhdHVz",
- "IqcCCgxJRFNQYWNrTGV2ZWwSDQoFSW5kZXgYASABKAUSFgoORGlzcGVuc2Vy",
- "TGV2ZWwYAiABKAUSFAoMTWlkVGFua0xldmVsGAMgASgBEhcKD0plcnJpY2Fu",
- "UHJlc2VudBgEIAEoCBIbChNGaWxsaW5nVGltZW91dEVycm9yGAUgASgIEhQK",
- "DE1pZFRhbmtFbXB0eRgGIAEoCBIfChdNaWRUYW5rUmVmaWxsUHVtcEFjdGl2",
- "ZRgHIAEoCBIdChVUaW1lclJlbWFpbmluZ1NlY29uZHMYCCABKAUSGAoQRGlz",
- "cGVuc2VyTGV2ZWw2NBgJIAEoAxIVCg1Ub3RhbFB1bXBGbG93GAogASgCEh0K",
- "FVRvdGFsUHVtcEFjdGl2aXR5VGltZRgLIAEoDUIjCiFjb20udHdpbmUudGFu",
- "Z28ucG1yLm1hY2hpbmVzdGF0dXNiBnByb3RvMw=="));
+ "GhBQdW1wU3RhdHVzLnByb3RvItsCCgxJRFNQYWNrTGV2ZWwSDQoFSW5kZXgY",
+ "ASABKAUSFgoORGlzcGVuc2VyTGV2ZWwYAiABKAUSFAoMTWlkVGFua0xldmVs",
+ "GAMgASgBEhcKD0plcnJpY2FuUHJlc2VudBgEIAEoCBIbChNGaWxsaW5nVGlt",
+ "ZW91dEVycm9yGAUgASgIEhQKDE1pZFRhbmtFbXB0eRgGIAEoCBIfChdNaWRU",
+ "YW5rUmVmaWxsUHVtcEFjdGl2ZRgHIAEoCBIdChVUaW1lclJlbWFpbmluZ1Nl",
+ "Y29uZHMYCCABKAUSGAoQRGlzcGVuc2VyTGV2ZWw2NBgJIAEoAxIVCg1Ub3Rh",
+ "bFB1bXBGbG93GAogASgCEh0KFVRvdGFsUHVtcEFjdGl2aXR5VGltZRgLIAEo",
+ "DRIyCgVQdW1wcxgMIAMoCzIjLlRhbmdvLlBNUi5NYWNoaW5lU3RhdHVzLlB1",
+ "bXBTdGF0dXNCIwohY29tLnR3aW5lLnRhbmdvLnBtci5tYWNoaW5lc3RhdHVz",
+ "YgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
- new pbr::FileDescriptor[] { },
+ new pbr::FileDescriptor[] { global::Tango.PMR.MachineStatus.PumpStatusReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
- new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.MachineStatus.IDSPackLevel), global::Tango.PMR.MachineStatus.IDSPackLevel.Parser, new[]{ "Index", "DispenserLevel", "MidTankLevel", "JerricanPresent", "FillingTimeoutError", "MidTankEmpty", "MidTankRefillPumpActive", "TimerRemainingSeconds", "DispenserLevel64", "TotalPumpFlow", "TotalPumpActivityTime" }, null, null, null)
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.MachineStatus.IDSPackLevel), global::Tango.PMR.MachineStatus.IDSPackLevel.Parser, new[]{ "Index", "DispenserLevel", "MidTankLevel", "JerricanPresent", "FillingTimeoutError", "MidTankEmpty", "MidTankRefillPumpActive", "TimerRemainingSeconds", "DispenserLevel64", "TotalPumpFlow", "TotalPumpActivityTime", "Pumps" }, null, null, null)
}));
}
#endregion
@@ -76,6 +78,7 @@ namespace Tango.PMR.MachineStatus {
dispenserLevel64_ = other.dispenserLevel64_;
totalPumpFlow_ = other.totalPumpFlow_;
totalPumpActivityTime_ = other.totalPumpActivityTime_;
+ pumps_ = other.pumps_.Clone();
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -207,6 +210,16 @@ namespace Tango.PMR.MachineStatus {
}
}
+ /// <summary>Field number for the "Pumps" field.</summary>
+ public const int PumpsFieldNumber = 12;
+ private static readonly pb::FieldCodec<global::Tango.PMR.MachineStatus.PumpStatus> _repeated_pumps_codec
+ = pb::FieldCodec.ForMessage(98, global::Tango.PMR.MachineStatus.PumpStatus.Parser);
+ private readonly pbc::RepeatedField<global::Tango.PMR.MachineStatus.PumpStatus> pumps_ = new pbc::RepeatedField<global::Tango.PMR.MachineStatus.PumpStatus>();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<global::Tango.PMR.MachineStatus.PumpStatus> Pumps {
+ get { return pumps_; }
+ }
+
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as IDSPackLevel);
@@ -231,6 +244,7 @@ namespace Tango.PMR.MachineStatus {
if (DispenserLevel64 != other.DispenserLevel64) return false;
if (TotalPumpFlow != other.TotalPumpFlow) return false;
if (TotalPumpActivityTime != other.TotalPumpActivityTime) return false;
+ if(!pumps_.Equals(other.pumps_)) return false;
return true;
}
@@ -248,6 +262,7 @@ namespace Tango.PMR.MachineStatus {
if (DispenserLevel64 != 0L) hash ^= DispenserLevel64.GetHashCode();
if (TotalPumpFlow != 0F) hash ^= TotalPumpFlow.GetHashCode();
if (TotalPumpActivityTime != 0) hash ^= TotalPumpActivityTime.GetHashCode();
+ hash ^= pumps_.GetHashCode();
return hash;
}
@@ -302,6 +317,7 @@ namespace Tango.PMR.MachineStatus {
output.WriteRawTag(88);
output.WriteUInt32(TotalPumpActivityTime);
}
+ pumps_.WriteTo(output, _repeated_pumps_codec);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -340,6 +356,7 @@ namespace Tango.PMR.MachineStatus {
if (TotalPumpActivityTime != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(TotalPumpActivityTime);
}
+ size += pumps_.CalculateSize(_repeated_pumps_codec);
return size;
}
@@ -381,6 +398,7 @@ namespace Tango.PMR.MachineStatus {
if (other.TotalPumpActivityTime != 0) {
TotalPumpActivityTime = other.TotalPumpActivityTime;
}
+ pumps_.Add(other.pumps_);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -435,6 +453,10 @@ namespace Tango.PMR.MachineStatus {
TotalPumpActivityTime = input.ReadUInt32();
break;
}
+ case 98: {
+ pumps_.AddEntriesFrom(input, _repeated_pumps_codec);
+ break;
+ }
}
}
}
diff --git a/Software/Visual_Studio/Tango.PMR/MachineStatus/PumpState.cs b/Software/Visual_Studio/Tango.PMR/MachineStatus/PumpState.cs
new file mode 100644
index 000000000..22cbb61a9
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/MachineStatus/PumpState.cs
@@ -0,0 +1,48 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: PumpState.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 PumpState.proto</summary>
+ public static partial class PumpStateReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for PumpState.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static PumpStateReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Cg9QdW1wU3RhdGUucHJvdG8SF1RhbmdvLlBNUi5NYWNoaW5lU3RhdHVzKjkK",
+ "CVB1bXBTdGF0ZRIGCgJPSxAAEgsKB01pc3NpbmcQARIKCgZGYXVsdHkQAhIL",
+ "CgdXb3JuT3V0EANCIwohY29tLnR3aW5lLnRhbmdvLnBtci5tYWNoaW5lc3Rh",
+ "dHVzYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.MachineStatus.PumpState), }, null));
+ }
+ #endregion
+
+ }
+ #region Enums
+ public enum PumpState {
+ [pbr::OriginalName("OK")] Ok = 0,
+ [pbr::OriginalName("Missing")] Missing = 1,
+ [pbr::OriginalName("Faulty")] Faulty = 2,
+ [pbr::OriginalName("WornOut")] WornOut = 3,
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/MachineStatus/PumpStatus.cs b/Software/Visual_Studio/Tango.PMR/MachineStatus/PumpStatus.cs
new file mode 100644
index 000000000..11eb3d62f
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/MachineStatus/PumpStatus.cs
@@ -0,0 +1,246 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: PumpStatus.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 PumpStatus.proto</summary>
+ public static partial class PumpStatusReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for PumpStatus.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static PumpStatusReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChBQdW1wU3RhdHVzLnByb3RvEhdUYW5nby5QTVIuTWFjaGluZVN0YXR1cxoO",
+ "UHVtcFR5cGUucHJvdG8aD1B1bXBTdGF0ZS5wcm90byKRAQoKUHVtcFN0YXR1",
+ "cxIvCgRUeXBlGAEgASgOMiEuVGFuZ28uUE1SLk1hY2hpbmVTdGF0dXMuUHVt",
+ "cFR5cGUSDQoFSW5kZXgYAiABKAUSEAoIQ2FwYWNpdHkYAyABKAMSMQoFU3Rh",
+ "dGUYBCABKA4yIi5UYW5nby5QTVIuTWFjaGluZVN0YXR1cy5QdW1wU3RhdGVC",
+ "IwohY29tLnR3aW5lLnRhbmdvLnBtci5tYWNoaW5lc3RhdHVzYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { global::Tango.PMR.MachineStatus.PumpTypeReflection.Descriptor, global::Tango.PMR.MachineStatus.PumpStateReflection.Descriptor, },
+ new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+ new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.MachineStatus.PumpStatus), global::Tango.PMR.MachineStatus.PumpStatus.Parser, new[]{ "Type", "Index", "Capacity", "State" }, null, null, null)
+ }));
+ }
+ #endregion
+
+ }
+ #region Messages
+ public sealed partial class PumpStatus : pb::IMessage<PumpStatus> {
+ private static readonly pb::MessageParser<PumpStatus> _parser = new pb::MessageParser<PumpStatus>(() => new PumpStatus());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<PumpStatus> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Tango.PMR.MachineStatus.PumpStatusReflection.Descriptor.MessageTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public PumpStatus() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public PumpStatus(PumpStatus other) : this() {
+ type_ = other.type_;
+ index_ = other.index_;
+ capacity_ = other.capacity_;
+ state_ = other.state_;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public PumpStatus Clone() {
+ return new PumpStatus(this);
+ }
+
+ /// <summary>Field number for the "Type" field.</summary>
+ public const int TypeFieldNumber = 1;
+ private global::Tango.PMR.MachineStatus.PumpType type_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tango.PMR.MachineStatus.PumpType Type {
+ get { return type_; }
+ set {
+ type_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "Index" field.</summary>
+ public const int IndexFieldNumber = 2;
+ private int index_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int Index {
+ get { return index_; }
+ set {
+ index_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "Capacity" field.</summary>
+ public const int CapacityFieldNumber = 3;
+ private long capacity_;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public long Capacity {
+ get { return capacity_; }
+ set {
+ capacity_ = value;
+ }
+ }
+
+ /// <summary>Field number for the "State" field.</summary>
+ public const int StateFieldNumber = 4;
+ private global::Tango.PMR.MachineStatus.PumpState state_ = 0;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Tango.PMR.MachineStatus.PumpState State {
+ get { return state_; }
+ set {
+ state_ = value;
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as PumpStatus);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(PumpStatus other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Type != other.Type) return false;
+ if (Index != other.Index) return false;
+ if (Capacity != other.Capacity) return false;
+ if (State != other.State) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Type != 0) hash ^= Type.GetHashCode();
+ if (Index != 0) hash ^= Index.GetHashCode();
+ if (Capacity != 0L) hash ^= Capacity.GetHashCode();
+ if (State != 0) hash ^= State.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 (Index != 0) {
+ output.WriteRawTag(16);
+ output.WriteInt32(Index);
+ }
+ if (Capacity != 0L) {
+ output.WriteRawTag(24);
+ output.WriteInt64(Capacity);
+ }
+ if (State != 0) {
+ output.WriteRawTag(32);
+ output.WriteEnum((int) State);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Type != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Type);
+ }
+ if (Index != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(Index);
+ }
+ if (Capacity != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Capacity);
+ }
+ if (State != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) State);
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(PumpStatus other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Type != 0) {
+ Type = other.Type;
+ }
+ if (other.Index != 0) {
+ Index = other.Index;
+ }
+ if (other.Capacity != 0L) {
+ Capacity = other.Capacity;
+ }
+ if (other.State != 0) {
+ State = other.State;
+ }
+ }
+
+ [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.PumpType) input.ReadEnum();
+ break;
+ }
+ case 16: {
+ Index = input.ReadInt32();
+ break;
+ }
+ case 24: {
+ Capacity = input.ReadInt64();
+ break;
+ }
+ case 32: {
+ state_ = (global::Tango.PMR.MachineStatus.PumpState) input.ReadEnum();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/Software/Visual_Studio/Tango.PMR/MachineStatus/PumpType.cs b/Software/Visual_Studio/Tango.PMR/MachineStatus/PumpType.cs
new file mode 100644
index 000000000..c9c7b2d42
--- /dev/null
+++ b/Software/Visual_Studio/Tango.PMR/MachineStatus/PumpType.cs
@@ -0,0 +1,45 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: PumpType.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 PumpType.proto</summary>
+ public static partial class PumpTypeReflection {
+
+ #region Descriptor
+ /// <summary>File descriptor for PumpType.proto</summary>
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static PumpTypeReflection() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Cg5QdW1wVHlwZS5wcm90bxIXVGFuZ28uUE1SLk1hY2hpbmVTdGF0dXMqHgoI",
+ "UHVtcFR5cGUSCAoEVDMzMBAAEggKBFQ0NTAQAUIjCiFjb20udHdpbmUudGFu",
+ "Z28ucG1yLm1hY2hpbmVzdGF0dXNiBnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.MachineStatus.PumpType), }, null));
+ }
+ #endregion
+
+ }
+ #region Enums
+ public enum PumpType {
+ [pbr::OriginalName("T330")] T330 = 0,
+ [pbr::OriginalName("T450")] T450 = 1,
+ }
+
+ #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 b96cd5d12..79dab6329 100644
--- a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
+++ b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj
@@ -163,6 +163,8 @@
<Compile Include="Diagnostics\StartDiagnosticsResponse.cs" />
<Compile Include="Diagnostics\StartEventsNotificationRequest.cs" />
<Compile Include="Diagnostics\StartEventsNotificationResponse.cs" />
+ <Compile Include="Diagnostics\StartTelemetryWireRequest.cs" />
+ <Compile Include="Diagnostics\StartTelemetryWireResponse.cs" />
<Compile Include="Diagnostics\StopDiagnosticsRequest.cs" />
<Compile Include="Diagnostics\StopDiagnosticsResponse.cs" />
<Compile Include="Diagnostics\StopEventsNotificationRequest.cs" />
@@ -305,6 +307,9 @@
<Compile Include="MachineStatus\IDSPackLevel.cs" />
<Compile Include="MachineStatus\MachineState.cs" />
<Compile Include="MachineStatus\MachineStatus.cs" />
+ <Compile Include="MachineStatus\PumpState.cs" />
+ <Compile Include="MachineStatus\PumpStatus.cs" />
+ <Compile Include="MachineStatus\PumpType.cs" />
<Compile Include="MachineStatus\SetBuzzerSettingsRequest.cs" />
<Compile Include="MachineStatus\SetBuzzerSettingsResponse.cs" />
<Compile Include="MachineStatus\SetInkAutoFillingModeRequest.cs" />
@@ -531,7 +536,7 @@
</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>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryWireStreamingSource.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryWireStreamingSource.cs
new file mode 100644
index 000000000..41ac42324
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryWireStreamingSource.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Integration.Operation;
+using Tango.Telemetry.Telemetries;
+
+namespace Tango.Telemetry.Sources
+{
+ public class TelemetryWireStreamingSource : ITelemetryStreamingSource
+ {
+ private IMachineOperator _machineOperator;
+
+ public bool IsStarted { get; private set; }
+ public string Name { get; } = "Wire Streaming";
+ public bool RequiresTelemetryDuplicationTracking { get; }
+
+ public event EventHandler<TelemetryAvailableEventArgs> TelemetryAvailable;
+
+ public TelemetryWireStreamingSource(IMachineOperator machineOperator)
+ {
+ _machineOperator = machineOperator;
+ }
+
+ public void Start()
+ {
+ if (!IsStarted)
+ {
+ IsStarted = true;
+ _machineOperator.TelemetryWireAvailable += MachineOperator_TelemetryWireAvailable;
+ }
+ }
+
+ public void Stop()
+ {
+ if (IsStarted)
+ {
+ IsStarted = false;
+ _machineOperator.TelemetryWireAvailable -= MachineOperator_TelemetryWireAvailable;
+ }
+ }
+
+ private void MachineOperator_TelemetryWireAvailable(object sender, PMR.Diagnostics.StartTelemetryWireResponse e)
+ {
+ if (IsStarted)
+ {
+ TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs()
+ {
+ DisableDeliveryRetries = true,
+ TelemetryObject = new TelemetryWire()
+ {
+ ID = String.Empty,
+ Time = DateTime.UtcNow,
+ Name = e.Name,
+ Value = e.Value
+ }
+ });
+ }
+ }
+
+ public void Dispose()
+ {
+ Stop();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj b/Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj
index 80c49ccfa..8b0c4dcc8 100644
--- a/Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj
+++ b/Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj
@@ -278,11 +278,13 @@
<Compile Include="Sources\TelemetryMachineStatusStreamingSource.cs" />
<Compile Include="Sources\TelemetryMachineUpdatesStreamingSource.cs" />
<Compile Include="Sources\TelemetryMachineUpdatesHistorySource.cs" />
+ <Compile Include="Sources\TelemetryWireStreamingSource.cs" />
<Compile Include="Telemetries\TelemetryEvent.cs" />
<Compile Include="Telemetries\TelemetryJobStatus.cs" />
<Compile Include="Telemetries\TelemetryLog.cs" />
<Compile Include="Telemetries\TelemetryMachineStatus.cs" />
<Compile Include="Telemetries\TelemetryMachineUpdate.cs" />
+ <Compile Include="Telemetries\TelemetryWire.cs" />
<Compile Include="TelemetryConfigurableSource.cs" />
<Compile Include="TelemetryHistorySourceCheckPoint.cs" />
<Compile Include="TelemetryHistorySourceDirection.cs" />
diff --git a/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryWire.cs b/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryWire.cs
new file mode 100644
index 000000000..5b3d82fbc
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryWire.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.Telemetry.Telemetries
+{
+ public class TelemetryWire : TelemetryBase
+ {
+ public String Name { get; set; }
+ public double Value { get; set; }
+ }
+}