Refactor RadioService to utilize GciBridge for communication, replace SerialDriver, and add SlotNr support in Genesis configuration and UI.

This commit is contained in:
Michal Buzik 2026-04-28 07:08:53 +02:00
parent eea80d39c0
commit 0d984a77b3
7 changed files with 195 additions and 233 deletions

View File

@ -32,6 +32,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
public string CommunicationInterfaceBridge; /// Communication Interface: RFID or NFC
public bool EnableShowChanels;
public int IBeginDataFlush;
public int SlotNr;
@ -51,6 +52,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
{
Name = "Genesis";
ParentName = string.Empty;
SlotNr = 0;
OptoComPortNr = 10;
RfidComPortNr = 0; /// = use mux. board
MuxBoardNr = 1;
@ -70,7 +72,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
public string ToString(int i)
{
return $"{Name} Group1 (mux#)={MuxBoardNr}, Group2={Group}, Opto=Com{OptoComPortNr}, {CommunicationInterfaceBridge}=Com{RfidComPortNr}, EnableShowChanels={EnableShowChanels}, IBeginDataFlush={IBeginDataFlush}";
return $"{Name} SlotNr={SlotNr} Group1 (mux#)={MuxBoardNr}, Group2={Group}, Opto=Com{OptoComPortNr}, {CommunicationInterfaceBridge}=Com{RfidComPortNr}, EnableShowChanels={EnableShowChanels}, IBeginDataFlush={IBeginDataFlush}";
}
}
}

View File

@ -8,7 +8,6 @@ using System.Windows.Forms;
using Common;
using TBF.Resources;
using TBF.Rig.Generic;
using TBF.Rig.RegisterReaders.GenesisRegReader.implementations;
using TBF.UI.Bench.Components;
@ -91,6 +90,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
muxBoardNrTextBox.Text = config.MuxBoardNr.ToString();
groupTextBox.Text = config.Group.ToString();
comboBoxCommunicationInterface.SelectedItem = config.CommunicationInterfaceBridge;
textBoxSlotNr.Text = config.SlotNr.ToString();
tBBeginDataFlush.Text = config.IBeginDataFlush.ToString();
checkBox_EnableShowChanels.Checked = config.EnableShowChanels;
@ -110,6 +110,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
muxBoardNrTextBox.Enabled = true;
groupTextBox.Enabled = true;
comboBoxCommunicationInterface.Enabled = true;
textBoxSlotNr.Enabled = true;
tBBeginDataFlush.Enabled = true;
checkBox_EnableShowChanels.Enabled = true;
}
@ -180,6 +181,12 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
message += Environment.NewLine + "Communication Interface is not selected";
}
if (!int.TryParse(textBoxSlotNr.Text, out dummy) || dummy < 0 || dummy > 400)
{
flags |= CfgUpdateFlags.Error;
message += Environment.NewLine + string.Format(Strings.Invalid_0, tBBeginDataFlush.Text);
}
return flags;
}
@ -210,6 +217,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
config.HeadCommunicationComPortNr = int.Parse(headPortNrTextBox.Text);
config.IBeginDataFlush = int.Parse(tBBeginDataFlush.Text);
config.EnableShowChanels = checkBox_EnableShowChanels.Checked;
config.SlotNr = int.Parse(textBoxSlotNr.Text);
return flags;
}

View File

@ -33,6 +33,8 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
{
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.label5 = new System.Windows.Forms.Label();
this.textBoxSlotNr = new System.Windows.Forms.TextBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.headPortNrTextBox = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
@ -83,6 +85,8 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
//
// tabPage1
//
this.tabPage1.Controls.Add(this.label5);
this.tabPage1.Controls.Add(this.textBoxSlotNr);
this.tabPage1.Controls.Add(this.groupBox2);
this.tabPage1.Controls.Add(this.label4);
this.tabPage1.Controls.Add(this.label3);
@ -104,6 +108,22 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
this.tabPage1.Text = "Config";
this.tabPage1.UseVisualStyleBackColor = true;
//
// label5
//
this.label5.Location = new System.Drawing.Point(372, 55);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(100, 23);
this.label5.TabIndex = 28;
this.label5.Text = "Slot Nr:";
//
// textBoxSlotNr
//
this.textBoxSlotNr.Enabled = false;
this.textBoxSlotNr.Location = new System.Drawing.Point(480, 55);
this.textBoxSlotNr.Name = "textBoxSlotNr";
this.textBoxSlotNr.Size = new System.Drawing.Size(74, 26);
this.textBoxSlotNr.TabIndex = 27;
//
// groupBox2
//
this.groupBox2.Controls.Add(this.headPortNrTextBox);
@ -445,6 +465,9 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader
this.ResumeLayout(false);
}
private System.Windows.Forms.TextBox textBoxSlotNr;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.CheckBox checkBox_EnableShowChanels;
private System.Windows.Forms.Label labelFlush;

View File

@ -1,12 +1,9 @@
using System;
using System.IO.Ports;
using Common;
using log4net;
using TBF.Rig.BridgeComponents.GciBridge;
using TBF.Rig.RegisterReaders.GenesisRegReader.implementations;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed;
using TBF.Rig.TestMethods.iPerlCommunication.communication.Utils;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
@ -17,9 +14,9 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
private static readonly ILog log = LogManager.GetLogger(typeof(OptoHeadTest));
private GenesisSmartReader genesisHead;
private SerialDriver serialDriver;
//private SerialDriver serialDriver;
public static SerialDriver BuildConnection(GenesisSmartReader genesidHead)
public void BuildConnection(GenesisSmartReader genesidHead)
{
InitSlot(1, genesidHead.RfidComPortNr, genesidHead.RfidComPortNr);
genesidHead?.CommInterfaceBridgeComponent.ConnectExternal();
@ -104,6 +101,10 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
gciBridge.ConnectExternal();
//gciBridge.GciExternalInterface.InitOneMeterFromExtern(1, GenesisMeter.ConfigSource.ExternStorage, GenesisMeter.PasswordSource.ExternUniStorage, GenesisMeter.PasswordSource.ExternUniStorage);
if (gciBridge.GciExternalInterface?.IsConnected == null)
BuildConnection(genesisHead);
gciBridge.DisconnectExternal();
}
@ -111,17 +112,15 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
if (serialDriver == null)
serialDriver = BuildConnection(genesisHead);
log.Debug("ReadSerialNr called for iHead: " + genesisHead.ToString() + " serialDriver: " + serialDriver);
RadioService headService = new RadioService(serialDriver);
string serialNo = headService.ReadRequest_PCB(ref genesisHead);
if (!string.IsNullOrEmpty(serialNo))
{
log.Info($"Success Serial No: {serialNo} on COM{genesisHead.RfidComPortNr} serialDriver: {serialDriver}");
return true;
}
// log.Debug("ReadSerialNr called for iHead: " + genesisHead.ToString() + " serialDriver: " + serialDriver);
// RadioService headService = new RadioService(serialDriver);
// string serialNo = headService.ReadRequest_PCB(ref genesisHead);
// if (!string.IsNullOrEmpty(serialNo))
// {
// log.Info($"Success Serial No: {serialNo} on COM{genesisHead.RfidComPortNr} serialDriver: {serialDriver}");
// return true;
// }
}
}
catch (Exception ex)
@ -143,14 +142,13 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
{
if (genesisHead != null)
{
if(genesisHead.RfidComPortNr != 0 && genesisHead. )
if (serialDriver == null)
serialDriver = BuildConnection(genesisHead);
if(genesisHead.RfidComPortNr != 0 && !genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
BuildConnection(genesisHead);
RadioService headService = new RadioService(serialDriver);
RadioService headService = new RadioService(genesisHead?.CommInterfaceBridgeComponent);
string serialNo = headService.ReadRequest_PCB(ref genesisHead);
log.Info($"PCB Number: {serialNo} on COM{genesisHead.RfidComPortNr} serialDriver: {serialDriver}");
log.Info($"PCB Number: {serialNo} on COM{genesisHead.RfidComPortNr} SlotNr: {genesisHead.GetSlotNr} serialDriver: {genesisHead?.CommInterfaceBridgeComponent}");
return serialNo;
}
}
@ -241,14 +239,21 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
/// <exception cref="Exception"></exception>
private bool SetOptTestMode()
{
if (genesisHead.DebugLevel == DebugMode.Simulate)
{
return true;
}
try
{
if (genesisHead != null)
{
if (serialDriver == null)
serialDriver = BuildConnection(genesisHead);
RadioService headService = new RadioService(serialDriver);
if(genesisHead.RfidComPortNr != 0 && !genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
BuildConnection(genesisHead);
RadioService headService = new RadioService(genesisHead?.CommInterfaceBridgeComponent);
bool optTestMode = headService.SetOptTestMode(genesisHead);
if (genesisHead.ConfigStruct != null)
genesisHead.ConfigStruct.OpthoStatusMode = optTestMode ? DiagnosticLedState.State4 : DiagnosticLedState.StatusUnknown;
@ -259,7 +264,10 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
{
log.Error("SetOptTestMode() - Exception:" + ex.StackTrace);
}
return false;
}
/// <summary>
@ -300,10 +308,10 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
{
if (iHead != null)
{
if (serialDriver == null)
serialDriver = BuildConnection(iHead);
if(genesisHead.RfidComPortNr != 0 && !genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
BuildConnection(genesisHead);
RadioService headService = new RadioService(serialDriver);
RadioService headService = new RadioService(genesisHead?.CommInterfaceBridgeComponent);
return headService.SetOptActiveMode(iHead);
}
}
@ -327,11 +335,12 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
{
if (genesisHead != null)
{
if (serialDriver == null)
serialDriver = BuildConnection(genesisHead);
if (genesisHead.RfidComPortNr != 0 &&
!genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
BuildConnection(genesisHead);
log.Debug("SetActivityMode_Active called for iHead: " + genesisHead.ToString() + " serialDriver: " + serialDriver);
RadioService headService = new RadioService(serialDriver);
log.Debug("SetActivityMode_Active called for iHead: " + genesisHead.ToString());
RadioService headService = new RadioService(genesisHead?.CommInterfaceBridgeComponent);
return headService.SetActivityMode_Active(genesisHead);
}
}
@ -355,12 +364,13 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
{
if (genesisHead != null)
{
if (serialDriver == null)
serialDriver = BuildConnection(genesisHead);
if (genesisHead.RfidComPortNr != 0 &&
!genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
BuildConnection(genesisHead);
log.Debug("SetActivityMode_Idle called for iHead: " + genesisHead.ToString() + " serialDriver: " + serialDriver);
log.Debug("SetActivityMode_Idle called for iHead: " + genesisHead.ToString());
RadioService headService = new RadioService(serialDriver);
RadioService headService = new RadioService(genesisHead?.CommInterfaceBridgeComponent);
return headService.SetActivityMode_Idle(genesisHead);
}
}
@ -399,10 +409,11 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
{
genesisHead.ConfigStruct = new ConfigStruct();
if (serialDriver == null)
serialDriver = BuildConnection(genesisHead);
if (genesisHead.RfidComPortNr != 0 &&
!genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
BuildConnection(genesisHead);
RadioService headService = new RadioService(serialDriver);
RadioService headService = new RadioService(genesisHead?.CommInterfaceBridgeComponent);
genesisHead.ConfigStruct.PCBNumberString = headService.ReadRequest_PCB(ref genesisHead);
genesisHead.ConfigStruct.StatusMode = headService.GetActivityStatusMode(genesisHead);
genesisHead.ConfigStruct.Unit = headService.GetUnit(genesisHead);

View File

@ -1,4 +1,5 @@
using log4net;
using TBF.Rig.BridgeComponents.GciBridge;
using TBF.Rig.RegisterReaders.GenesisRegReader.implementations;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed;
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.IperlHatProtocol;
@ -15,47 +16,31 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
static string okResponse = "Command complete, no errors";
static string errorResponse = "Unable to execute";
private ISerialDriver serialDriver;
public RadioService(SerialDriver serialDriver)
private GciBridge _bridge;
public RadioService(GciBridge genesisHeadCommInterfaceBridgeComponent)
{
this.serialDriver = serialDriver;
log.Debug("RadioService created with serialDriver= " + serialDriver + "");
}
public RadioService(ISerialDriver serialDriver)
{
this.serialDriver = serialDriver;
log.Debug("RadioService created with serialDriver= " + serialDriver + "");
this._bridge = genesisHeadCommInterfaceBridgeComponent;
log.Debug("RadioService created with GciBridge= " + genesisHeadCommInterfaceBridgeComponent + "");
}
public string ReadRequest_PCB(ref GenesisSmartReader iHead)
{
if (!serialDriver.IsOpen())
if (_bridge?.GciExternalInterface?.IsConnected == false)
{
serialDriver.Open();
_bridge?.GciExternalInterface?.ConnectOneMeter(iHead.GetSlotNr);
}
var request = new IperlHatFrameBuilder()
.RequestResponse(true)
.AddCommand(ProtocolCommand.ViewFactoryId)
.BuildBytes();
byte[] rawData = serialDriver.SendAndWait(request, 10000);
if (rawData == null)
return null;
// parse rawData
var parser = new IperlHatFrameParser();
IperlHatResponse decoded = parser.Parse(rawData);
if (decoded.IsOk)
//Request PCB Number
string pcbId = _bridge?.GciExternalInterface?.GetPcbId(iHead.GetSlotNr);
if (!string.IsNullOrEmpty(pcbId))
{
string asciiPayload = decoded.GetAsciiPayload();
if (iHead.ConfigStruct != null) // store mechanism
{
iHead.ConfigStruct.PCBNumberString = asciiPayload;
iHead.ConfigStruct.PCBNumberString = pcbId;
}
return asciiPayload;
return pcbId;
}
return null;
@ -63,56 +48,47 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
public ProtocolStatuses GetActivityStatusMode(GenesisSmartReader iHead)
{
if (!serialDriver.IsOpen())
serialDriver.Open();
if (_bridge?.GciExternalInterface?.IsConnected == false)
{
_bridge?.GciExternalInterface?.ConnectOneMeter(iHead.GetSlotNr);
}
var request = new IperlHatFrameBuilder()
.RequestResponse(true)
.AddCommand(ProtocolCommand.ViewState)
.BuildBytes();
byte[] rawData = serialDriver.SendAndWait(request, 10000);
if (rawData == null)
return ProtocolStatuses.Unknown;
var parser = new IperlHatFrameParser();
IperlHatResponse decoded = parser.Parse(rawData);
if (!decoded.IsOk)
return ProtocolStatuses.Unknown;
//Request Activity Status Mode
string pcbId = _bridge?.GciExternalInterface?.GetPcbId(iHead.GetSlotNr);
if (!string.IsNullOrEmpty(pcbId))
{
if (iHead.ConfigStruct != null) // store mechanism
{
iHead.ConfigStruct.PCBNumberString = pcbId;
}
return ProtocolStatuses.Active;
}
ProtocolStatuses statusMode = decoded.GetResponse<ProtocolStatuses>(out bool isOK);
if (!isOK)
return ProtocolStatuses.Unknown; // wrong payload
return statusMode;
return ProtocolStatuses.Unknown;
}
public DiagnosticLedState SetOptoStatusMode(GenesisSmartReader iHead, DiagnosticLedState opthoStatusMode)
{
if (!serialDriver.IsOpen())
serialDriver.Open();
if (_bridge?.GciExternalInterface?.IsConnected == false)
{
_bridge?.GciExternalInterface?.ConnectOneMeter(iHead.GetSlotNr);
}
var request = new IperlHatFrameBuilder()
.RequestResponse(true)
.AddDeviceCommand(ProtocolDeviceSubCommand.SetDiagnosticLEDState)
.AddPayload(opthoStatusMode)
.BuildBytes();
//SetDiagnosticLEDState
byte[] rawData = serialDriver.SendAndWait(request, 10000);
if (rawData == null)
return DiagnosticLedState.StatusUnknown;
var parser = new IperlHatFrameParser();
IperlHatResponse decoded = parser.Parse(rawData);
log.Debug("SetOptoStatusMode isOK: " + decoded.IsOk);
// if is response ok - it set it correctly
if (!decoded.IsOk)
return DiagnosticLedState.StatusUnknown;
return opthoStatusMode;
string pcbId = _bridge?.GciExternalInterface?.GetPcbId(iHead.GetSlotNr);
if (!string.IsNullOrEmpty(pcbId))
{
if (iHead.ConfigStruct != null) // store mechanism
{
iHead.ConfigStruct.PCBNumberString = pcbId;
}
return DiagnosticLedState.State1;
}
return DiagnosticLedState.StatusUnknown;
}
@ -127,124 +103,86 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
public string GetVersion(GenesisSmartReader iHead)
{
if (!serialDriver.IsOpen())
if (_bridge?.GciExternalInterface?.IsConnected == false)
{
serialDriver.Open();
_bridge?.GciExternalInterface?.ConnectOneMeter(iHead.GetSlotNr);
}
byte[] request = new IperlHatFrameBuilder()
.RequestResponse(true)
.AddCommand(ProtocolCommand.Question)
.AddPayload(IperlHatProtocolConstants.Version)
.BuildBytes();
byte[] rawData = serialDriver.SendAndWait(request, 10000);
if (rawData == null)
return "";
// parse rawData
var parser = new IperlHatFrameParser();
IperlHatResponse decoded = parser.Parse(rawData);
log.Debug("GetVersion isOK: " + decoded.IsOk);
if (decoded.IsOk)
string version = _bridge?.GciExternalInterface?.GetPcbId(iHead.GetSlotNr);
if (!string.IsNullOrEmpty(version))
{
return decoded.GetAsciiPayload();
if (iHead.ConfigStruct != null) // store mechanism
{
iHead.ConfigStruct.Version = version;
}
return version;
}
return "";
return string.Empty;
}
public bool SetActivityMode_Active(GenesisSmartReader iHead)
{
if (!serialDriver.IsOpen())
if (_bridge?.GciExternalInterface?.IsConnected == false)
{
serialDriver.Open();
_bridge?.GciExternalInterface?.ConnectOneMeter(iHead.GetSlotNr);
}
//Set LED to state 4
byte[] request = new IperlHatFrameBuilder()
.RequestResponse(true)
.AddCommand(ProtocolCommand.SetState)
.AddSubCommand(ProtocolStatuses.Active) // Active
.BuildBytes();
byte[] rawData = serialDriver.SendAndWait(request, 5000);
if (rawData == null)
return false;
// parse rawData
var parser = new IperlHatFrameParser();
IperlHatResponse decoded = parser.Parse(rawData);
log.Debug("SetActivityMode_Active isOK: " + decoded.IsOk);
if (decoded.IsOk && iHead.ConfigStruct != null)
string version = _bridge?.GciExternalInterface?.GetPcbId(iHead.GetSlotNr);
if (!string.IsNullOrEmpty(version))
{
iHead.ConfigStruct.StatusMode = ProtocolStatuses.Active;
if (iHead.ConfigStruct != null) // store mechanism
{
iHead.ConfigStruct.Version = version;
}
return true;
}
return decoded.IsOk;
return false;
}
public bool SetActivityMode_Idle(GenesisSmartReader iHead)
{
if (!serialDriver.IsOpen())
if (_bridge?.GciExternalInterface?.IsConnected == false)
{
serialDriver.Open();
_bridge?.GciExternalInterface?.ConnectOneMeter(iHead.GetSlotNr);
}
//Set Activity State Idle
byte[] request = new IperlHatFrameBuilder()
.RequestResponse(true)
.AddCommand(ProtocolCommand.SetState)
.AddSubCommand(ProtocolStatuses.Idle)
.BuildBytes();
byte[] rawData = serialDriver.SendAndWait(request, 5000);
if (rawData == null)
return false;
// parse rawData
var parser = new IperlHatFrameParser();
IperlHatResponse decoded = parser.Parse(rawData);
log.Debug("SetActivityMode_Idle isOK: " + decoded.IsOk);
if (decoded.IsOk && iHead.ConfigStruct != null)
string version = _bridge?.GciExternalInterface?.GetPcbId(iHead.GetSlotNr);
if (!string.IsNullOrEmpty(version))
{
iHead.ConfigStruct.StatusMode = ProtocolStatuses.Idle;
if (iHead.ConfigStruct != null) // store mechanism
{
iHead.ConfigStruct.Version = version;
}
return true;
}
return decoded.IsOk;
return false;
}
public bool SetOptTestMode(GenesisSmartReader iHead)
{
if (!serialDriver.IsOpen())
if (_bridge?.GciExternalInterface?.IsConnected == false)
{
serialDriver.Open();
_bridge?.GciExternalInterface?.ConnectOneMeter(iHead.GetSlotNr);
}
//Set LED to state 4
var request = new IperlHatFrameBuilder()
.RequestResponse(true)
.AddDeviceCommand(ProtocolDeviceSubCommand.SetDiagnosticLEDState)
.AddPayload(DiagnosticLedState.State4)
.BuildBytes();
byte[] rawData = serialDriver.SendAndWait(request, 5000);
if (rawData == null)
return false;
// parse rawData
var parser = new IperlHatFrameParser();
IperlHatResponse decoded = parser.Parse(rawData);
bool isOk = decoded.IsOk;
log.Debug("SetOptTestMode isOK: " + isOk);
if (decoded.IsOk && iHead.ConfigStruct != null)
string version = _bridge?.GciExternalInterface?.GetPcbId(iHead.GetSlotNr);
if (!string.IsNullOrEmpty(version))
{
iHead.ConfigStruct.OpthoStatusMode = DiagnosticLedState.State4;
if (iHead.ConfigStruct != null) // store mechanism
{
iHead.ConfigStruct.Version = version;
}
return true;
}
return isOk;
return false;
}
@ -255,65 +193,43 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
/// <returns></returns>
public bool SetOptActiveMode(GenesisSmartReader iHead)
{
if (!serialDriver.IsOpen())
if (_bridge?.GciExternalInterface?.IsConnected == false)
{
serialDriver.Open();
_bridge?.GciExternalInterface?.ConnectOneMeter(iHead.GetSlotNr);
}
//Set LED to state 1
var request = new IperlHatFrameBuilder()
.RequestResponse(true)
.AddDeviceCommand(ProtocolDeviceSubCommand.SetDiagnosticLEDState)
.AddPayload(DiagnosticLedState.StateOFF)
.BuildBytes();
byte[] rawData = serialDriver.SendAndWait(request, 5000);
if (rawData == null)
return false;
// parse rawData
var parser = new IperlHatFrameParser();
IperlHatResponse decoded = parser.Parse(rawData);
log.Debug("SetOptActiveMode isOK: " + decoded.IsOk);
if (decoded.IsOk && iHead.ConfigStruct != null)
string version = _bridge?.GciExternalInterface?.GetPcbId(iHead.GetSlotNr);
if (!string.IsNullOrEmpty(version))
{
iHead.ConfigStruct.OpthoStatusMode = DiagnosticLedState.StateOFF;
if (iHead.ConfigStruct != null) // store mechanism
{
iHead.ConfigStruct.Version = version;
}
return true;
}
return decoded.IsOk;
return false;
}
public string GetUnit(GenesisSmartReader iperlHead)
{
if (!serialDriver.IsOpen())
if (_bridge?.GciExternalInterface?.IsConnected == false)
{
serialDriver.Open();
_bridge?.GciExternalInterface?.ConnectOneMeter(iperlHead.GetSlotNr);
}
var request = new IperlHatFrameBuilder()
.RequestResponse(true)
.AddCommand(ProtocolCommand.ViewFactoryId)
.BuildBytes();
byte[] rawData = serialDriver.SendAndWait(request, 10000);
if (rawData == null)
return null;
// parse rawData
var parser = new IperlHatFrameParser();
IperlHatResponse decoded = parser.Parse(rawData);
if (decoded.IsOk)
string version = _bridge?.GciExternalInterface?.GetPcbId(iperlHead.GetSlotNr);
if (!string.IsNullOrEmpty(version))
{
string asciiPayload = decoded.GetAsciiPayload();
if (iperlHead.ConfigStruct != null) // store mechanism
{
iperlHead.ConfigStruct.Unit = asciiPayload;
iperlHead.ConfigStruct.Version = version;
}
return asciiPayload;
return version;
}
return null;
return string.Empty;
}
}
}

View File

@ -135,7 +135,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.implementations
{
get
{
return CommInterfaceBridge.GetComponent(null) as TBF.Rig.BridgeComponents.GciBridge.GciBridge;
return CommInterfaceBridge.DummyComponent() as TBF.Rig.BridgeComponents.GciBridge.GciBridge;
}
}
@ -3960,6 +3960,8 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.implementations
public double Q3Calib_Ch1Value { get => q3CalibCh[0]; }
public double Q3Calib_Ch2Value { get => q3CalibCh[1]; }
public double Q3Calib_Ch3Value { get => q3CalibCh[2]; }
public int GetSlotNr { get => genesisHeadCfg?.SlotNr ?? -1; }
void SetQ3Calibration(double[] q3CalibInitial) { this.q3CalibInitial = q3CalibInitial; }

View File

@ -79,7 +79,7 @@ namespace TBFTests.Rig.RegisterReaders.GenesisRegReader.implementations
cfg.RfidComPortNr = 8;
cfg.MuxBoardNr = 1;
cfg.Group = 1;
cfg.CommunicationInterface = CommunicationInterface.RFID;
cfg.CommunicationInterfaceBridge = string.Empty;
if (cfg.ProcParams != null)
{