426 lines
15 KiB
C#
426 lines
15 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Common;
|
|
using GenesisCordonelInterface.API;
|
|
using log4net;
|
|
using TBF.Rig.BridgeComponents.GciBridge;
|
|
using TBF.Rig.RegisterReaders.GenesisRegReader.implementations;
|
|
using TBF.Rig.TestMethods.iPerlCommunication.communication.C4.diagnosticLed;
|
|
|
|
|
|
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 void BuildConnection(GenesisSmartReader genesidHead)
|
|
{
|
|
GciPublicModels.GciInitSlotRequest request = new GciPublicModels.GciInitSlotRequest
|
|
{
|
|
SlotId = genesidHead.GetSlotNr,
|
|
ConfigSource = GciPublicModels.GciConfigSource.InterfaceInputConfig,
|
|
PasswordSource = GciPublicModels.GciPasswordSource.InterfaceInputPassword,
|
|
RequestPort = new GciPublicModels.GciPortConfig{ PortName = $"COM{genesidHead.RfidComPortNr}"/*, Type = "COM"*/},
|
|
StreamingPort = new GciPublicModels.GciPortConfig{ PortName = $"COM{genesidHead.OptoComPortNr}"/*, Type = "COM"*/}
|
|
};
|
|
genesidHead?.CommInterfaceBridge.InitSlotAsync(request);
|
|
slotDefined = true;
|
|
}
|
|
|
|
public OptoHeadTest(GenesisSmartReader genesisHead)
|
|
{
|
|
this.genesisHead = genesisHead;
|
|
}
|
|
|
|
public void CloseConnection()
|
|
{
|
|
genesisHead?.CommInterfaceBridge?.DisconnectAsync(genesisHead.GetSlotNr);
|
|
DisposeSlot();
|
|
|
|
// if (serialDriver != null)
|
|
// serialDriver.CloseConnection();
|
|
// serialDriver = null;
|
|
}
|
|
|
|
private bool slotDefined = false;
|
|
|
|
public bool IsSlotDefined { get => slotDefined; }
|
|
|
|
|
|
public void DisposeSlot()
|
|
{
|
|
slotDefined = false;
|
|
}
|
|
|
|
public async Task<bool> ReadSerialNrAsync()
|
|
{
|
|
try
|
|
{
|
|
if (genesisHead == null)
|
|
return false;
|
|
|
|
if (string.IsNullOrEmpty(genesisHead.CommInterface))
|
|
return false;
|
|
|
|
if (genesisHead.CommInterfaceBridge == null)
|
|
return false;
|
|
|
|
if (!IsSlotDefined)
|
|
BuildConnection(genesisHead);
|
|
|
|
GciBridge gciBridge = genesisHead.CommInterfaceBridge;
|
|
|
|
gciBridge.GciBridgeCfg.EnableExternalAccess = true;
|
|
gciBridge.GciBridgeCfg.EnableGuiAccess = false;
|
|
gciBridge.Initialize();
|
|
|
|
RadioService headService = new RadioService(gciBridge);
|
|
|
|
string pcbId = await headService.ReadRequest_PCBAsync(genesisHead);
|
|
|
|
return !string.IsNullOrEmpty(pcbId);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error($"ReadSerialNr(COM{genesisHead?.RfidComPortNr}) - Exception: {ex}");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public string ReadRequest_PCB()
|
|
{
|
|
// if (genesisHead.DebugLevel == DebugMode.Simulate)
|
|
// {
|
|
// log.Debug("ReadRequest_PCB() - Simulated response");
|
|
// return "-OK Simulated response-";
|
|
// }
|
|
|
|
try
|
|
{
|
|
log.Debug("ReadRequest_PCB called for iHead: " + genesisHead.ToString());
|
|
if (genesisHead == null)
|
|
return string.Empty;
|
|
|
|
if (string.IsNullOrEmpty(genesisHead.CommInterface))
|
|
return string.Empty;
|
|
|
|
if (genesisHead.CommInterfaceBridge == null)
|
|
return string.Empty;
|
|
|
|
if (!IsSlotDefined) { BuildConnection(genesisHead); }
|
|
|
|
GciBridge gciBridge = genesisHead.CommInterfaceBridge;
|
|
log.Debug("ReadRequest_PCB() - GciBridge created");
|
|
|
|
gciBridge.GciBridgeCfg.EnableExternalAccess = true;
|
|
gciBridge.GciBridgeCfg.EnableGuiAccess = false;
|
|
gciBridge.Initialize();
|
|
log.Debug("ReadRequest_PCB() - GciBridge initialized");
|
|
|
|
|
|
RadioService headService = new RadioService(gciBridge);
|
|
string serialNo = headService.ReadRequest_PCB(ref genesisHead);
|
|
log.Info(
|
|
$"PCB Number: {serialNo} on COM{genesisHead.RfidComPortNr} SlotNr: {genesisHead.GetSlotNr} serialDriver: {genesisHead?.CommInterfaceBridge}");
|
|
return serialNo;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error("ReadRequest_PCB() - Exception:" + ex.StackTrace);
|
|
return (ex.Message.ToString());
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set Test mode
|
|
/// </summary>
|
|
/// <param name="iHead"></param>
|
|
/// <returns></returns>
|
|
public bool SetTestMode()
|
|
{
|
|
if (!IsSlotDefined) { BuildConnection(genesisHead); }
|
|
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()
|
|
{
|
|
if (!IsSlotDefined) { BuildConnection(genesisHead); }
|
|
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()
|
|
{
|
|
|
|
if (genesisHead.DebugLevel == DebugMode.Simulate)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
// try
|
|
// {
|
|
// if (genesisHead != null)
|
|
// {
|
|
// 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;
|
|
// 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";
|
|
// }
|
|
|
|
return "Set Active Mode - No Implemented 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(genesisHead.RfidComPortNr != 0 && !genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
|
|
// BuildConnection(genesisHead);
|
|
//
|
|
// RadioService headService = new RadioService(genesisHead?.CommInterfaceBridgeComponent);
|
|
// 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 (genesisHead.RfidComPortNr != 0 &&
|
|
// !genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
|
|
// BuildConnection(genesisHead);
|
|
//
|
|
// log.Debug("SetActivityMode_Active called for iHead: " + genesisHead.ToString());
|
|
// RadioService headService = new RadioService(genesisHead?.CommInterfaceBridgeComponent);
|
|
// 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 (genesisHead.RfidComPortNr != 0 &&
|
|
// !genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
|
|
// BuildConnection(genesisHead);
|
|
//
|
|
// log.Debug("SetActivityMode_Idle called for iHead: " + genesisHead.ToString());
|
|
//
|
|
// RadioService headService = new RadioService(genesisHead?.CommInterfaceBridgeComponent);
|
|
// 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 (genesisHead.RfidComPortNr != 0 &&
|
|
// !genesisHead?.CommInterfaceBridgeComponent?.GciExternalInterface?.IsConnected == false)
|
|
// BuildConnection(genesisHead);
|
|
//
|
|
// 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);
|
|
//
|
|
// 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;
|
|
}
|
|
}
|
|
}
|
|
} |