Add Genesis radio/opto communication and configuration components
- Replace `OpthoHeadService` with `RadioService` to enhance Genesis communication handling via serial interface. - Introduce `OptoReceivedEventArgs` to manage event-driven communication. - Add foundational protocol implementations (`BaseProtocol`, `IProtocol`, etc.) for Genesis configuration and processing. - Implement `SirtConfig`, `MeterConfig`, and `ProcessConfig` classes for flexible Genesis configuration management. - Expand Genesis framework to support diagnostics, activity modes, and version retrieval.
This commit is contained in:
@@ -0,0 +1,370 @@
|
||||
using System;
|
||||
using System.IO.Ports;
|
||||
using Common;
|
||||
using log4net;
|
||||
using TBF.Rig.RegisterReaders.GenesisRegReader.implementations;
|
||||
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed;
|
||||
using TBF.Rig.TestMethods.iPerlCommunication.communication.Utils;
|
||||
|
||||
|
||||
namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
|
||||
{
|
||||
public class OptoHeadTest : IDisposable
|
||||
{
|
||||
//protected static readonly ILog rfidDataLogger = LogManager.GetLogger("RfidData");
|
||||
private static readonly ILog log = LogManager.GetLogger(typeof(OptoHeadTest));
|
||||
|
||||
private GenesisSmartReader genesisHead;
|
||||
private SerialDriver serialDriver;
|
||||
|
||||
public static SerialDriver BuildConnection(GenesisSmartReader iHead)
|
||||
{
|
||||
return new SerialDriverBuilder()
|
||||
.WithPort($"COM{iHead.RfidComPortNr}")
|
||||
.WithBaudRate(2400)
|
||||
.WithDataBits(8)
|
||||
.WithParity(Parity.None)
|
||||
.WithStopBits(StopBits.One)
|
||||
.WithTimeouts(4000, 2000)
|
||||
.BuildAndConnect();
|
||||
|
||||
}
|
||||
|
||||
public OptoHeadTest(GenesisSmartReader genesisHead)
|
||||
{
|
||||
this.genesisHead = genesisHead;
|
||||
}
|
||||
|
||||
public void CloseConnection()
|
||||
{
|
||||
if (serialDriver != null)
|
||||
serialDriver.CloseConnection();
|
||||
serialDriver = null;
|
||||
}
|
||||
|
||||
public bool ReadSerialNr()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (genesisHead != null)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error($"ReadSerialNr(COM{genesisHead.RfidComPortNr}) - Exception:" + ex.Message);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public string ReadRequest_PCB()
|
||||
{
|
||||
if (genesisHead.DebugLevel == DebugMode.Simulate)
|
||||
{
|
||||
return "-OK Simulated response-";
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (genesisHead != null)
|
||||
{
|
||||
if (serialDriver == null)
|
||||
serialDriver = BuildConnection(genesisHead);
|
||||
|
||||
RadioService headService = new RadioService(serialDriver);
|
||||
string serialNo = headService.ReadRequest_PCB(ref genesisHead);
|
||||
log.Info($"PCB Number: {serialNo} on COM{genesisHead.RfidComPortNr} serialDriver: {serialDriver}");
|
||||
return serialNo;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error("ReadRequest_PCB() - Exception:" + ex.StackTrace);
|
||||
return (ex.Message.ToString());
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set Test mode
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <returns></returns>
|
||||
public bool SetTestMode()
|
||||
{
|
||||
log.Debug("SetTestMode called for iHead: " + genesisHead.ToString());
|
||||
bool activityModeActive = SetActivityMode_Active();
|
||||
bool optActiveMode = SetOptTestMode();
|
||||
|
||||
log.Debug("SetTestMode result: optoMod-> " + optActiveMode + " meterModeActive ->" + activityModeActive);
|
||||
return (optActiveMode && activityModeActive);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set Active mode
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <returns></returns>
|
||||
public bool SetActiveMode()
|
||||
{
|
||||
log.Debug("SetActiveMode called for iHead: " + genesisHead.ToString());
|
||||
bool optActiveMode = SetOptActiveMode(genesisHead);
|
||||
//bool activityModeIdle = SetActivityMode_Idle();
|
||||
|
||||
return optActiveMode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set Idle mode - only
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <returns></returns>
|
||||
public bool SetIdleMode()
|
||||
{
|
||||
log.Debug("SetIdleMode called for iHead: " + genesisHead.ToString());
|
||||
bool activityModeIdle = SetActivityMode_Idle();
|
||||
|
||||
return activityModeIdle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set Test mode - string response
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <param name="isTestModeSuccessful"></param>
|
||||
/// <returns></returns>
|
||||
public string SetTestMode(ref bool isTestModeSuccessful)
|
||||
{
|
||||
if (genesisHead.DebugLevel == DebugMode.Simulate)
|
||||
{
|
||||
isTestModeSuccessful = true;
|
||||
return "-OK Simulated response-";
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
bool testMode = SetTestMode();
|
||||
isTestModeSuccessful = testMode;
|
||||
return testMode ? "Set Test Mode - OK" : "Set Test Mode - FAILED";
|
||||
}catch (Exception ex)
|
||||
{
|
||||
log.Error("SetTestMode() - Exception:" + ex.StackTrace);
|
||||
return "Set Test Mode - Exception";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Set Optical -> Test mode
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="Exception"></exception>
|
||||
private bool SetOptTestMode()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (genesisHead != null)
|
||||
{
|
||||
if (serialDriver == null)
|
||||
serialDriver = BuildConnection(genesisHead);
|
||||
|
||||
RadioService headService = new RadioService(serialDriver);
|
||||
bool optTestMode = headService.SetOptTestMode(genesisHead);
|
||||
if (genesisHead.ConfigStruct != null)
|
||||
genesisHead.ConfigStruct.OpthoStatusMode = optTestMode ? DiagnosticLedState.State4 : DiagnosticLedState.StatusUnknown;
|
||||
return optTestMode;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error("SetOptTestMode() - Exception:" + ex.StackTrace);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set Active mode - string response
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <param name="isTestModeSuccessful"></param>
|
||||
/// <returns></returns>
|
||||
public string SetActiveMode(ref bool isTestModeSuccessful)
|
||||
{
|
||||
if (genesisHead.DebugLevel == DebugMode.Simulate)
|
||||
{
|
||||
isTestModeSuccessful = true;
|
||||
return "-OK Simulated response-";
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
bool activeMode = SetActiveMode();
|
||||
isTestModeSuccessful = activeMode;
|
||||
return activeMode ? "Set Active Mode - OK" : "Set Active Mode - FAILED";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error("SetActiveMode() - Exception:" + ex.StackTrace);
|
||||
return "Set Active Mode - Exception";
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Set Optical -> Active mode
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="Exception"></exception>
|
||||
private bool SetOptActiveMode(GenesisSmartReader iHead)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (iHead != null)
|
||||
{
|
||||
if (serialDriver == null)
|
||||
serialDriver = BuildConnection(iHead);
|
||||
|
||||
RadioService headService = new RadioService(serialDriver);
|
||||
return headService.SetOptActiveMode(iHead);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error("SetOptActiveMode() - Exception:" + ex.StackTrace);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set activity mode to active
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="Exception"></exception>
|
||||
private bool SetActivityMode_Active()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (genesisHead != null)
|
||||
{
|
||||
if (serialDriver == null)
|
||||
serialDriver = BuildConnection(genesisHead);
|
||||
|
||||
log.Debug("SetActivityMode_Active called for iHead: " + genesisHead.ToString() + " serialDriver: " + serialDriver);
|
||||
RadioService headService = new RadioService(serialDriver);
|
||||
return headService.SetActivityMode_Active(genesisHead);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error("SetActivityMode_Active() - Exception:" + ex.StackTrace);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set activity mode to idle
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="Exception"></exception>
|
||||
private bool SetActivityMode_Idle()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (genesisHead != null)
|
||||
{
|
||||
if (serialDriver == null)
|
||||
serialDriver = BuildConnection(genesisHead);
|
||||
|
||||
log.Debug("SetActivityMode_Idle called for iHead: " + genesisHead.ToString() + " serialDriver: " + serialDriver);
|
||||
|
||||
RadioService headService = new RadioService(serialDriver);
|
||||
return headService.SetActivityMode_Idle(genesisHead);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Error("SetActivityMode_Idle() - Exception:" + ex.StackTrace);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
CloseConnection();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read configuration from iHead
|
||||
/// DiagnosticLedState is not readable, mus only be set!
|
||||
/// </summary>
|
||||
/// <param name="iHead"></param>
|
||||
/// <param name="ledState"></param>
|
||||
/// <returns></returns>
|
||||
public bool ReadConfiguration(DiagnosticLedState ledState )
|
||||
{
|
||||
if (genesisHead.DebugLevel == DebugMode.Simulate)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
if (genesisHead != null)
|
||||
{
|
||||
genesisHead.ConfigStruct = new ConfigStruct();
|
||||
|
||||
if (serialDriver == null)
|
||||
serialDriver = BuildConnection(genesisHead);
|
||||
|
||||
RadioService headService = new RadioService(serialDriver);
|
||||
genesisHead.ConfigStruct.PCBNumberString = headService.ReadRequest_PCB(ref genesisHead);
|
||||
genesisHead.ConfigStruct.StatusMode = headService.GetActivityStatusMode(genesisHead);
|
||||
genesisHead.ConfigStruct.Unit = headService.GetUnit(genesisHead);
|
||||
|
||||
if (ledState != DiagnosticLedState.StatusUnknown) // do set
|
||||
{
|
||||
genesisHead.ConfigStruct.OpthoStatusMode = headService.SetOptoStatusMode(genesisHead, ledState);
|
||||
}
|
||||
else
|
||||
{
|
||||
genesisHead.ConfigStruct.OpthoStatusMode = DiagnosticLedState.StatusUnknown;
|
||||
}
|
||||
|
||||
genesisHead.ConfigStruct.Version = headService.GetVersion(genesisHead);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user