diff --git a/TBF/Rig/TestMethods/iPerlCommunication/communication/C4/protocolCommons/VersionTypeResult.cs b/TBF/Rig/TestMethods/iPerlCommunication/communication/C4/protocolCommons/VersionTypeResult.cs
index 692ea7e08..4f6fe4553 100644
--- a/TBF/Rig/TestMethods/iPerlCommunication/communication/C4/protocolCommons/VersionTypeResult.cs
+++ b/TBF/Rig/TestMethods/iPerlCommunication/communication/C4/protocolCommons/VersionTypeResult.cs
@@ -2,134 +2,128 @@ using System.Text.RegularExpressions;
namespace TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons
{
- using System;
-using System.Text.RegularExpressions;
-
- namespace TBF.Rig.TestMethods.iPerlCommunication.communication.C4.IperlHatProtocol
+ public class VersionTypeResult
{
- public class VersionTypeResult
+ public string TouchReadVersion { get; set; }
+
+ public string MeterDeviceType { get; set; }
+
+ public string MeterFirmwareVersion { get; set; }
+
+ public static VersionTypeResult ParseVersionTypePayload(
+ string payload)
{
- public string TouchReadVersion { get; set; }
-
- public string MeterDeviceType { get; set; }
-
- public string MeterFirmwareVersion { get; set; }
-
- public static VersionTypeResult ParseVersionTypePayload(
- string payload)
+ if (string.IsNullOrWhiteSpace(payload))
{
- if (string.IsNullOrWhiteSpace(payload))
- {
- return null;
- }
-
- string normalizedPayload = payload
- .Trim('\0', '\r', '\n', ' ');
-
- VersionTypeResult result =
- ParseCompactPayload(normalizedPayload);
-
- if (result != null)
- {
- return result;
- }
-
- return ParseLegacyPayload(normalizedPayload);
+ return null;
}
- private static VersionTypeResult ParseCompactPayload(
- string payload)
+ string normalizedPayload = payload
+ .Trim('\0', '\r', '\n', ' ');
+
+ VersionTypeResult result =
+ ParseCompactPayload(normalizedPayload);
+
+ if (result != null)
{
- // Expected format:
- // B1.23,SWM004,1.00
-
- string[] parts = payload.Split(',');
-
- if (parts.Length != 3)
- {
- return null;
- }
-
- string touchReadVersion = parts[0].Trim();
- string meterDeviceType = parts[1].Trim();
- string meterFirmwareVersion = parts[2].Trim();
-
- if (string.IsNullOrWhiteSpace(touchReadVersion) ||
- string.IsNullOrWhiteSpace(meterDeviceType) ||
- string.IsNullOrWhiteSpace(meterFirmwareVersion))
- {
- return null;
- }
-
- return new VersionTypeResult
- {
- TouchReadVersion = touchReadVersion,
- MeterDeviceType = meterDeviceType,
- MeterFirmwareVersion = meterFirmwareVersion
- };
+ return result;
}
- private static VersionTypeResult ParseLegacyPayload(
- string payload)
+ return ParseLegacyPayload(normalizedPayload);
+ }
+
+ private static VersionTypeResult ParseCompactPayload(
+ string payload)
+ {
+ // Expected format:
+ // B1.23,SWM004,1.00
+
+ string[] parts = payload.Split(',');
+
+ if (parts.Length != 3)
{
- // Expected example:
- //
- // vers: Harry T:B800, V:06.06.01, FW:190215,
- // 7ECE, B1.6.01, HW:4, Serial:0
-
- Match deviceTypeMatch = Regex.Match(
- payload,
- @"(?:^|[\s,])T\s*:\s*([^,\s]+)",
- RegexOptions.IgnoreCase);
-
- Match versionMatch = Regex.Match(
- payload,
- @"(?:^|[\s,])V\s*:\s*([^,\s]+)",
- RegexOptions.IgnoreCase);
-
- Match firmwareMatch = Regex.Match(
- payload,
- @"(?:^|[\s,])FW\s*:\s*([^,\s]+)",
- RegexOptions.IgnoreCase);
-
- if (!deviceTypeMatch.Success ||
- !versionMatch.Success ||
- !firmwareMatch.Success)
- {
- return null;
- }
-
- string meterDeviceType =
- deviceTypeMatch.Groups[1].Value.Trim();
-
- string touchReadVersion =
- versionMatch.Groups[1].Value.Trim();
-
- string meterFirmwareVersion =
- firmwareMatch.Groups[1].Value.Trim();
-
- if (string.IsNullOrWhiteSpace(touchReadVersion) ||
- string.IsNullOrWhiteSpace(meterDeviceType) ||
- string.IsNullOrWhiteSpace(meterFirmwareVersion))
- {
- return null;
- }
-
- return new VersionTypeResult
- {
- TouchReadVersion = touchReadVersion,
- MeterDeviceType = meterDeviceType,
- MeterFirmwareVersion = meterFirmwareVersion
- };
+ return null;
}
- public override string ToString()
+ string touchReadVersion = parts[0].Trim();
+ string meterDeviceType = parts[1].Trim();
+ string meterFirmwareVersion = parts[2].Trim();
+
+ if (string.IsNullOrWhiteSpace(touchReadVersion) ||
+ string.IsNullOrWhiteSpace(meterDeviceType) ||
+ string.IsNullOrWhiteSpace(meterFirmwareVersion))
{
- return
- $"TouchReadVersion={TouchReadVersion}, " +
- $"MeterDeviceType={MeterDeviceType}, " +
- $"MeterFirmwareVersion={MeterFirmwareVersion}";
+ return null;
}
+
+ return new VersionTypeResult
+ {
+ TouchReadVersion = touchReadVersion,
+ MeterDeviceType = meterDeviceType,
+ MeterFirmwareVersion = meterFirmwareVersion
+ };
+ }
+
+ private static VersionTypeResult ParseLegacyPayload(
+ string payload)
+ {
+ // Expected example:
+ //
+ // vers: Harry T:B800, V:06.06.01, FW:190215,
+ // 7ECE, B1.6.01, HW:4, Serial:0
+
+ Match deviceTypeMatch = Regex.Match(
+ payload,
+ @"(?:^|[\s,])T\s*:\s*([^,\s]+)",
+ RegexOptions.IgnoreCase);
+
+ Match versionMatch = Regex.Match(
+ payload,
+ @"(?:^|[\s,])V\s*:\s*([^,\s]+)",
+ RegexOptions.IgnoreCase);
+
+ Match firmwareMatch = Regex.Match(
+ payload,
+ @"(?:^|[\s,])FW\s*:\s*([^,\s]+)",
+ RegexOptions.IgnoreCase);
+
+ if (!deviceTypeMatch.Success ||
+ !versionMatch.Success ||
+ !firmwareMatch.Success)
+ {
+ return null;
+ }
+
+ string meterDeviceType =
+ deviceTypeMatch.Groups[1].Value.Trim();
+
+ string touchReadVersion =
+ versionMatch.Groups[1].Value.Trim();
+
+ string meterFirmwareVersion =
+ firmwareMatch.Groups[1].Value.Trim();
+
+ if (string.IsNullOrWhiteSpace(touchReadVersion) ||
+ string.IsNullOrWhiteSpace(meterDeviceType) ||
+ string.IsNullOrWhiteSpace(meterFirmwareVersion))
+ {
+ return null;
+ }
+
+ return new VersionTypeResult
+ {
+ TouchReadVersion = touchReadVersion,
+ MeterDeviceType = meterDeviceType,
+ MeterFirmwareVersion = meterFirmwareVersion
+ };
+ }
+
+ public override string ToString()
+ {
+ return
+ $"TouchReadVersion={TouchReadVersion}, " +
+ $"MeterDeviceType={MeterDeviceType}, " +
+ $"MeterFirmwareVersion={MeterFirmwareVersion}";
}
}
}
\ No newline at end of file
diff --git a/TBF/Rig/TestMethods/iPerlCommunication/communication/OptoHeadTest.cs b/TBF/Rig/TestMethods/iPerlCommunication/communication/OptoHeadTest.cs
index 8b238f183..5ecd3ffac 100644
--- a/TBF/Rig/TestMethods/iPerlCommunication/communication/OptoHeadTest.cs
+++ b/TBF/Rig/TestMethods/iPerlCommunication/communication/OptoHeadTest.cs
@@ -5,6 +5,7 @@ using log4net;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed;
using TBF.Rig.TestMethods.iPerlCommunication.communication.Utils;
using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead;
+using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons;
namespace TBF.Rig.TestMethods.iPerlCommunication.communication
{
@@ -365,5 +366,466 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.communication
return false;
}
}
+
+ ///
+ /// Reads TouchRead version, meter device type
+ /// and meter firmware version.
+ ///
+ ///
+ /// Parsed version information or null when the operation fails.
+ ///
+ public VersionTypeResult SetViewVersionAndType()
+ {
+ if (iperlHead == null)
+ {
+ log.Warn(
+ "SetViewVersionAndType: IperlHead is null.");
+
+ return null;
+ }
+
+ if (iperlHead.DebugLevel == DebugMode.Simulate)
+ {
+ return new VersionTypeResult
+ {
+ TouchReadVersion = "SIMULATED",
+ MeterDeviceType = "SIMULATED",
+ MeterFirmwareVersion = "SIMULATED"
+ };
+ }
+
+ try
+ {
+ if (serialDriver == null)
+ {
+ serialDriver = BuildConnection(iperlHead);
+ }
+
+ log.Debug(
+ "SetViewVersionAndType called for iHead: " +
+ iperlHead +
+ " serialDriver: " +
+ serialDriver);
+
+ var headService =
+ new RadioService(serialDriver);
+
+ VersionTypeResult result =
+ headService.SetViewVersionAndType(iperlHead);
+
+ if (result == null)
+ {
+ log.Warn(
+ "SetViewVersionAndType: No valid response received.");
+ }
+ else
+ {
+ log.Info(
+ "SetViewVersionAndType result: " +
+ result);
+ }
+
+ return result;
+ }
+ catch (Exception ex)
+ {
+ log.Error(
+ "SetViewVersionAndType failed.",
+ ex);
+
+ return null;
+ }
+ }
+
+ ///
+ /// Reads the configured meter reading units.
+ ///
+ ///
+ /// Reading units or null when the operation fails.
+ ///
+ public ReadingUnits? ViewReadingUnits()
+ {
+ if (iperlHead == null)
+ {
+ log.Warn(
+ "ViewReadingUnits: IperlHead is null.");
+
+ return null;
+ }
+
+ if (iperlHead.DebugLevel == DebugMode.Simulate)
+ {
+ return ReadingUnits.CubicMeters;
+ }
+
+ try
+ {
+ if (serialDriver == null)
+ {
+ serialDriver = BuildConnection(iperlHead);
+ }
+
+ log.Debug(
+ "ViewReadingUnits called for iHead: " +
+ iperlHead +
+ " serialDriver: " +
+ serialDriver);
+
+ var headService =
+ new RadioService(serialDriver);
+
+ ReadingUnits? result =
+ headService.ViewReadingUnits(iperlHead);
+
+ if (!result.HasValue)
+ {
+ log.Warn(
+ "ViewReadingUnits: No valid response received.");
+ }
+ else
+ {
+ log.Info(
+ $"ViewReadingUnits result: {result.Value} " +
+ $"(0x{Convert.ToByte(result.Value):X2})");
+ }
+
+ return result;
+ }
+ catch (Exception ex)
+ {
+ log.Error(
+ "ViewReadingUnits failed.",
+ ex);
+
+ return null;
+ }
+ }
+
+ ///
+ /// Reads the configured display flip mode.
+ ///
+ ///
+ /// Flip mode or null when the operation fails.
+ ///
+ public FlipMode? ViewFlipMode()
+ {
+ if (iperlHead == null)
+ {
+ log.Warn(
+ "ViewFlipMode: IperlHead is null.");
+
+ return null;
+ }
+
+ if (iperlHead.DebugLevel == DebugMode.Simulate)
+ {
+ return (FlipMode)0x00;
+ }
+
+ try
+ {
+ if (serialDriver == null)
+ {
+ serialDriver = BuildConnection(iperlHead);
+ }
+
+ log.Debug(
+ "ViewFlipMode called for iHead: " +
+ iperlHead +
+ " serialDriver: " +
+ serialDriver);
+
+ var headService =
+ new RadioService(serialDriver);
+
+ FlipMode? result =
+ headService.ViewFlipMode(iperlHead);
+
+ if (!result.HasValue)
+ {
+ log.Warn(
+ "ViewFlipMode: No valid response received.");
+ }
+ else
+ {
+ log.Info(
+ $"ViewFlipMode result: {result.Value} " +
+ $"(0x{Convert.ToByte(result.Value):X2})");
+ }
+
+ return result;
+ }
+ catch (Exception ex)
+ {
+ log.Error(
+ "ViewFlipMode failed.",
+ ex);
+
+ return null;
+ }
+ }
+
+ ///
+ /// Reads the calibration factor.
+ ///
+ ///
+ /// Calibration factor information or null when the operation fails.
+ ///
+ public CalibrationFactorResult ViewCalibration()
+ {
+ if (iperlHead == null)
+ {
+ log.Warn(
+ "ViewCalibration: IperlHead is null.");
+
+ return null;
+ }
+
+ if (iperlHead.DebugLevel == DebugMode.Simulate)
+ {
+ return new CalibrationFactorResult
+ {
+ RawValue = 4096,
+ Percentage = 100.0,
+ CorrectionPercentage = 0.0
+ };
+ }
+
+ try
+ {
+ if (serialDriver == null)
+ {
+ serialDriver = BuildConnection(iperlHead);
+ }
+
+ log.Debug(
+ "ViewCalibration called for iHead: " +
+ iperlHead +
+ " serialDriver: " +
+ serialDriver);
+
+ var headService =
+ new RadioService(serialDriver);
+
+ CalibrationFactorResult result =
+ headService.ViewCalibration(iperlHead);
+
+ if (result == null)
+ {
+ log.Warn(
+ "ViewCalibration: No valid response received.");
+ }
+ else
+ {
+ log.Info(
+ "ViewCalibration result: " +
+ result);
+ }
+
+ return result;
+ }
+ catch (Exception ex)
+ {
+ log.Error(
+ "ViewCalibration failed.",
+ ex);
+
+ return null;
+ }
+ }
+
+ ///
+ /// Reads and logs all additional configuration values.
+ ///
+ ///
+ /// True when all values were read successfully.
+ ///
+ public bool ReadExtendedConfiguration()
+ {
+ if (iperlHead == null)
+ {
+ log.Warn(
+ "ReadExtendedConfiguration: IperlHead is null.");
+
+ return false;
+ }
+
+ try
+ {
+ VersionTypeResult versionType =
+ SetViewVersionAndType();
+
+ ReadingUnits? readingUnits =
+ ViewReadingUnits();
+
+ FlipMode? flipMode =
+ ViewFlipMode();
+
+ CalibrationFactorResult calibration =
+ ViewCalibration();
+
+ bool successful =
+ versionType != null &&
+ readingUnits.HasValue &&
+ flipMode.HasValue &&
+ calibration != null;
+
+ log.Info(
+ "ReadExtendedConfiguration result: " +
+ $"Success={successful}, " +
+ $"VersionType={versionType}, " +
+ $"ReadingUnits={readingUnits}, " +
+ $"FlipMode={flipMode}, " +
+ $"Calibration={calibration}");
+
+ return successful;
+ }
+ catch (Exception ex)
+ {
+ log.Error(
+ "ReadExtendedConfiguration failed.",
+ ex);
+
+ return false;
+ }
+ }
+
+ ///
+ /// Reads additional common parameters:
+ /// version and type, reading units, flip mode
+ /// and calibration factor.
+ ///
+ ///
+ /// Result intended for GUI and test-process output.
+ ///
+ ///
+ /// True when all parameters were read successfully.
+ ///
+ public bool ReadAdditionalCommonParameters(
+ out string resultStr)
+ {
+ resultStr = string.Empty;
+
+ if (iperlHead == null)
+ {
+ resultStr =
+ "Read additional common parameters: iPerl head is null.";
+
+ log.Warn(resultStr);
+
+ return false;
+ }
+
+ if (iperlHead.DebugLevel == DebugMode.Simulate)
+ {
+ resultStr =
+ "Version/type: SIMULATED; " +
+ "Reading units: CubicMeters; " +
+ "Flip mode: 0x00; " +
+ "Calibration: 4096 (100.0000 %, correction 0.0000 %)";
+
+ return true;
+ }
+
+ try
+ {
+ if (serialDriver == null)
+ {
+ serialDriver =
+ BuildConnection(iperlHead);
+ }
+
+ var headService =
+ new RadioService(serialDriver);
+
+ VersionTypeResult versionType =
+ headService.SetViewVersionAndType(iperlHead);
+
+ ReadingUnits? readingUnits =
+ headService.ViewReadingUnits(iperlHead);
+
+ FlipMode? flipMode =
+ headService.ViewFlipMode(iperlHead);
+
+ CalibrationFactorResult calibration =
+ headService.ViewCalibration(iperlHead);
+
+ bool successful =
+ versionType != null &&
+ readingUnits.HasValue &&
+ flipMode.HasValue &&
+ calibration != null;
+
+ string versionTypeText =
+ versionType == null
+ ? "FAILED"
+ : versionType.ToString();
+
+ string readingUnitsText =
+ readingUnits.HasValue
+ ? string.Format(
+ "{0} (0x{1:X2})",
+ readingUnits.Value,
+ Convert.ToByte(readingUnits.Value))
+ : "FAILED";
+
+ string flipModeText =
+ flipMode.HasValue
+ ? string.Format(
+ "{0} (0x{1:X2})",
+ flipMode.Value,
+ Convert.ToByte(flipMode.Value))
+ : "FAILED";
+
+ string calibrationText;
+
+ if (calibration == null)
+ {
+ calibrationText = "FAILED";
+ }
+ else
+ {
+ calibrationText = string.Format(
+ "{0} ({1:F4} %, correction {2:+0.0000;-0.0000;0.0000} %)",
+ calibration.RawValue,
+ calibration.Percentage,
+ calibration.CorrectionPercentage);
+ }
+
+ resultStr =
+ "Version/type: " + versionTypeText +
+ "; Reading units: " + readingUnitsText +
+ "; Flip mode: " + flipModeText +
+ "; Calibration: " + calibrationText;
+
+ if (successful)
+ {
+ log.Info(
+ "ReadAdditionalCommonParameters: " +
+ resultStr);
+ }
+ else
+ {
+ log.Warn(
+ "ReadAdditionalCommonParameters failed: " +
+ resultStr);
+ }
+
+ return successful;
+ }
+ catch (Exception ex)
+ {
+ resultStr =
+ "Read additional common parameters failed: " +
+ ex.Message;
+
+ log.Error(
+ "ReadAdditionalCommonParameters failed.",
+ ex);
+
+ return false;
+ }
+ }
+
}
}
\ No newline at end of file
diff --git a/TBF/Rig/TestMethods/iPerlCommunication/communication/RadioService.cs b/TBF/Rig/TestMethods/iPerlCommunication/communication/RadioService.cs
index 9055f0853..f0b8a40f2 100644
--- a/TBF/Rig/TestMethods/iPerlCommunication/communication/RadioService.cs
+++ b/TBF/Rig/TestMethods/iPerlCommunication/communication/RadioService.cs
@@ -1,11 +1,9 @@
using System;
using System.Text;
-using System.Text.RegularExpressions;
using log4net;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.IperlHatProtocol;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons;
-using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons.TBF.Rig.TestMethods.iPerlCommunication.communication.C4.IperlHatProtocol;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.wiredProtocol;
using TBF.Rig.TestMethods.iPerlCommunication.communication.Utils;
using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead;
diff --git a/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs b/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs
index 81d210d10..1d1cefd29 100644
--- a/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs
+++ b/TBF/Rig/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs
@@ -20,9 +20,10 @@ using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead;
using Results.Entities;
using static Sensus.iPerl.NfcHandler.MCI_Protocol;
using System.Threading.Tasks;
-using TBF.Rig.TestMethods.iPerlCommunication.communication;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.protocolCommons;
+using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication;
+
namespace TBF.Rig.TestMethods.iPerlCommunication
{
@@ -61,8 +62,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
const int Q2CorrFactorsAddrLR = 0x1878;
const int Q2CorrFactorsAddrRL = 0x1879;
- public const string ReadConfigurationStr = "Read configuration"; /// Example: "Read configuration" or "Read configuration if enabled"
- public const string SetTestModeStr = "Set Test mode"; /// Example: "Set Test mode" or "Set Test mode A0" (hexadecimal number is the required 'testModeConfig'
+ public const string ReadConfigurationStr = "Read configuration"; // Example: "Read configuration" or "Read configuration if enabled"
+ public const string SetTestModeStr = "Set Test mode"; // Example: "Set Test mode" or "Set Test mode A0" (hexadecimal number is the required 'testModeConfig'
public const string SetActiveModeStr = "Set Active mode";
public const string ReadSerialNrStr = "Read SerialNr";
public const string SetIdleModeStr = "Set Idle mode";
@@ -237,6 +238,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
#if IPERL
ContextMenu cm = new ContextMenu();
cm.MenuItems.Add(NewMenuItem("Read PCB Number" , "ReadPCB"));
+ cm.MenuItems.Add(NewMenuItem( iPerlCommunicationConstants.ReadAdditionalCommonParametersStr, "ReadAdditionalCommonParameters"));
cm.MenuItems.Add(NewMenuItem("Enter Test Mode" , "StartTestMode"));
cm.MenuItems.Add(NewMenuItem("Turn Off Test Mode (Enter Active Mode)", "TurnOffTestMode"));
cm.MenuItems.Add(NewMenuItem("Set Production Mode (Radio not start with flow)" , "SetProductionMode"));
@@ -715,6 +717,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
else if (currentActivity.ToLower().Equals(SetActiveModeStr.ToLower())) error = SetActiveMode(threadID, ihead, ref resultStr);
else if (currentActivity.ToLower().Equals(SetIdleModeStr.ToLower())) error = SetIdleMode(threadID, ihead, ref resultStr);
else if (currentActivity.ToLower().Contains(ReadConfigurationStr.ToLower())) error = ReadConfiguration(ihead, wm, ref resultStr);
+ else if (currentActivity.ToLower().Contains( iPerlCommunicationConstants.ReadAdditionalCommonParametersStr.ToLower())) error = ReadAdditionalCommonParameters( ihead, ref resultStr);
///
/// RFID communication functions below require a reference to water meter entity (wm != null)
///
@@ -1012,6 +1015,41 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
return error;
}
+ ///
+ /// Reads additional common parameters through the optical head.
+ ///
+ private static CommErr ReadAdditionalCommonParameters( IperlHead ihead, ref string resultStr)
+ {
+ if (ihead == null)
+ {
+ resultStr = "Read additional common parameters: iPerl head is null.";
+ return CommErr.CommFailed;
+ }
+
+ if (ihead.CommFailed)
+ {
+ resultStr = "Read additional common parameters: previous communication failed.";
+ return CommErr.CommFailed;
+ }
+
+ if (ihead.OptoHeadTest == null)
+ {
+ resultStr = "Read additional common parameters: OptoHeadTest is not available.";
+ return CommErr.CommFailed;
+ }
+
+ try
+ {
+ bool successful = ihead.OptoHeadTest.ReadAdditionalCommonParameters( out resultStr);
+ return successful ? CommErr.None : CommErr.Read;
+ }
+ catch (Exception ex)
+ {
+ resultStr = "Read additional common parameters failed: " + ex.Message;
+ log.Error( "ReadAdditionalCommonParameters failed.", ex);
+ return CommErr.Read;
+ }
+ }
///
/// Read a complete calibration structure from the watermeter
@@ -2719,6 +2757,22 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
case "ReadPCB":
txt = iHead.OptoHeadTest.ReadRequest_PCB();
break;
+ case "ReadAdditionalCommonParameters":
+ {
+ if (iHead.OptoHeadTest == null)
+ {
+ txt = "OptoHeadTest is not available.";
+ break;
+ }
+
+ success = iHead.OptoHeadTest .ReadAdditionalCommonParameters( out txt);
+
+ if (!success && string.IsNullOrWhiteSpace(txt))
+ {
+ txt = "Failed to read additional common parameters.";
+ }
+ break;
+ }
case "WriteRequestPort_u8_Customer_Text":
txt = "Not Supported NOW!";//OpticalHeadTest.WriteRequestPort_u8_Customer_Text(iHead);
break;
@@ -2743,6 +2797,9 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
case "SetNFC":
txt = "Not Supported NOW!";//OpticalHeadTest.SetNfcMode(iHead);
break;
+ default:
+ txt = "Unsupported operation: " + Convert.ToString(tag);
+ break;
}
return txt;
}
@@ -2862,5 +2919,6 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
e.Cancel = true;
}
}
+
}
}
diff --git a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationConstants.cs b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationConstants.cs
index f2f092549..81421a066 100644
--- a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationConstants.cs
+++ b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationConstants.cs
@@ -10,6 +10,7 @@ namespace TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication
public const int Q2CorrFactorsAddrRL = 0x1879;
public const string ReadConfigurationStr = "Read configuration"; /// Example: "Read configuration" or "Read configuration if enabled"
+ public const string ReadAdditionalCommonParametersStr = "Read Additional Common Parameters";
public const string SetTestModeStr = "Set Test mode"; /// Example: "Set Test mode" or "Set Test mode A0" (hexadecimal number is the required 'testModeConfig'
public const string SetActiveModeStr = "Set Active mode";
public const string ReadCalibrationStr = "Read calibration";
diff --git a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationParams.cs b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationParams.cs
index afab00fdc..b356a8951 100644
--- a/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationParams.cs
+++ b/TBF/Rig/Uni/SharedDialogs/SmartMetersCommunication/iPerlCommunicationParams.cs
@@ -44,6 +44,7 @@ namespace TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication
{
var retVal = new List();
retVal.Add(iPerlCommunicationConstants.ReadConfigurationStr);
+ retVal.Add(iPerlCommunicationConstants.ReadAdditionalCommonParametersStr);
retVal.Add(string.Format("{0} A0", iPerlCommunicationConstants.SetTestModeStr));
retVal.Add(string.Format("{0} A4", iPerlCommunicationConstants.SetTestModeStr));
retVal.Add(iPerlCommunicationConstants.ReadCalibrationStr);