Increment assembly version to 3.9.3097.1, add SlotGroupedLogin support in iPerlCommunicationForm, implement GroupedLoginSlot method in OptoHeadTest, and update slot operation logic with enhanced error messaging.

This commit is contained in:
Michal Buzik 2026-05-13 12:57:23 +02:00
parent d346dcfa03
commit 2526e997e3
25 changed files with 115 additions and 16 deletions

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("3.9.3095.1")]
[assembly: AssemblyFileVersion("3.9.3095.1")]
[assembly: AssemblyVersion("3.9.3097.1")]
[assembly: AssemblyFileVersion("3.9.3097.1")]

View File

@ -1260,6 +1260,80 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
return ex.Message;
}
}
public BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult GroupedLoginSlot()
{
if (genesisHead != null && genesisHead.DebugLevel == DebugMode.Simulate)
{
log.Debug("Connect() - Simulated response");
return new BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult
{
SlotId = genesisHead.GetSlotNr,
Success = true,
Message = "Simulated Connect",
ConnectResult = null,
PcbResult = null,
PasswordResult = null,
SetPasswordResult = null,
LoginResult = null,
};
}
var gciFullLoginResult = Task.Run(() => GroupedLoginSlot_Async(genesisHead))
.GetAwaiter()
.GetResult();
return gciFullLoginResult;
}
public string GroupedLoginSlotStr()
{
if (genesisHead != null && genesisHead.DebugLevel == DebugMode.Simulate)
{
log.Debug("Connect() - Simulated response");
return "Simulated Connect";
}
var gciFullLoginResult = Task.Run(() => GroupedLoginSlot_Async(genesisHead))
.GetAwaiter()
.GetResult();
return gciFullLoginResult.Success ? ResultOk : ResultNok;
}
private async Task<BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult> GroupedLoginSlot_Async(GenesisSmartReader genesisSmartReader)
{
try
{
log.Debug("GroupedLoginSlot_Async called for iHead: " + genesisHead);
var gciFullLoginResult = new BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult()
{
Success = false,
};
if (genesisHead == null) return gciFullLoginResult;
if (string.IsNullOrEmpty(genesisHead.CommInterface)) return gciFullLoginResult;
if (genesisHead.CommInterfaceBridge == null) return gciFullLoginResult;
CancellationToken token = default;
log.Debug($"GroupedLoginSlot_Async( Slot: {genesisSmartReader.GetSlotNr}) - Start");
BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult connectFullPassLoginWithRetryAsync = await genesisSmartReader.CommInterfaceBridge.ConnectFullPassLoginWithRetryAsync(genesisSmartReader.GetSlotNr, token);
log.Debug($"GroupedLoginSlot_Async( Slot: {genesisSmartReader.GetSlotNr}) - Result: " + connectFullPassLoginWithRetryAsync);
return connectFullPassLoginWithRetryAsync;
}
catch (Exception ex)
{
log.Error($"GroupedLoginSlot_Async({genesisHead.GetSlotNr}) - Exception:", ex);
return new BridgeComponents.GciBridge.Interfaces.PublicModels.GciFullLoginResult()
{
Success = false,
Message = ex.Message
};
}
}
public string SetTestModeSlot()
{
@ -1291,7 +1365,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
byte valueLed = (ledMode == LedState.active) ? (byte)6 : (byte)0;
log.Debug($"SetTestModeSlot_Async( Slot: {genesisSmartReader.GetSlotNr}) - Start - Set Led Mode: {valueLed}");
var registerWriteResult = await gciBridge.WriteRegisterAsync(genesisSmartReader.GetSlotNr, RadioService.LedMode, valueLed, false, false, token);
var registerWriteResult = await gciBridge.WriteRegisterWithRetryAsync(genesisSmartReader.GetSlotNr, RadioService.LedMode, valueLed, false, false, token);
if (registerWriteResult == null || !registerWriteResult.Success)
{
@ -1342,7 +1416,7 @@ namespace TBF.Rig.RegisterReaders.GenesisRegReader.communication
log.Debug(
$"SetActiveModeSlot_Async( Slot: {genesisSmartReader.GetSlotNr}) - Start - Set Led Mode: {valueLed}");
var registerWriteResult = await gciBridge.WriteRegisterAsync(genesisSmartReader.GetSlotNr,
var registerWriteResult = await gciBridge.WriteRegisterWithRetryAsync(genesisSmartReader.GetSlotNr,
RadioService.LedMode, valueLed, false, false, token);
if (registerWriteResult == null || !registerWriteResult.Success)

View File

@ -57,6 +57,7 @@ namespace TBF.Rig.TestMethods.GenesisCommunication
retVal.Add(iPerlCommunicationForm.SlotPCBSlotStr);
retVal.Add(iPerlCommunicationForm.SlotSetPasswordStr);
retVal.Add(iPerlCommunicationForm.SlotLoginStr);
retVal.Add(iPerlCommunicationForm.SlotGroupedLoginStr);
retVal.Add(iPerlCommunicationForm.SlotSetTestModeStr);
retVal.Add(iPerlCommunicationForm.SlotSetActiveModeStr);
retVal.Add(iPerlCommunicationForm.SlotDisconnectStr);

View File

@ -83,6 +83,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
public const string SlotPCBSlotStr = "PCB Slot";
public const string SlotSetPasswordStr = "Set Password";
public const string SlotLoginStr = "Login";
public const string SlotGroupedLoginStr = "Login (Combined workflow)";
public const string SlotSetTestModeStr = "Switch to Test Mode";
public const string SlotSetActiveModeStr ="Switch to Active Mode";
public const string SlotDisconnectStr = "Disconnect Slot";
@ -752,6 +753,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
else if (currentActivity.ToLower().Equals(SlotPCBSlotStr.ToLower())) error = SlotPCBSlot(threadID, ihead, ref resultStr);
else if (currentActivity.ToLower().Equals(SlotSetPasswordStr.ToLower())) error = SlotSetPassword(threadID, ihead, ref resultStr);
else if (currentActivity.ToLower().Equals(SlotLoginStr.ToLower())) error = SlotLogin(threadID, ihead, ref resultStr);
else if (currentActivity.ToLower().Equals(SlotGroupedLoginStr.ToLower())) error = SlotGroupedLogin(threadID, ihead, ref resultStr);
else if (currentActivity.ToLower().Equals(SlotSetTestModeStr.ToLower())) error = SlotSetTestMode(threadID, ihead, ref resultStr);
else if (currentActivity.ToLower().Equals(SlotSetActiveModeStr.ToLower())) error = SlotSetActiveMode(threadID, ihead, ref resultStr);
else if (currentActivity.ToLower().Equals(SlotDisconnectStr.ToLower())) error = SlotDisconnect(threadID, ihead, ref resultStr);
@ -853,6 +855,28 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
}
}
private CommErr SlotGroupedLogin(int threadId, GenesisSmartReader iHead, ref string resultStr)
{
CommErr error = CommErr.FailedLogin;
var gciFullLoginResult = iHead.OptoHeadTest.GroupedLoginSlot();
if (gciFullLoginResult.Success)
{
log.Debug("SlotLogin successful");
resultStr = string.Format($"Login OK - Serial No: {gciFullLoginResult?.PcbResult?.Result?.PcbId}");
iHead.SerialNr = gciFullLoginResult?.PcbResult?.Result?.PcbId;
if (iHead.ConfigStruct != null)
{
iHead.ConfigStruct.PCBNumberString = gciFullLoginResult?.PcbResult?.Result?.PcbId;
}
error = CommErr.None;
}
else
{
resultStr = "Failed Combined Login";
}
return error;
}
private CommErr SlotDisconnect(int threadId, GenesisSmartReader iHead, ref string resultStr)
{
CommErr error = CommErr.FailedSetActiveMode;
@ -894,12 +918,12 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
if (!string.IsNullOrEmpty(resultStr) && resultStr.Equals(TBF.Rig.RegisterReaders.GenesisRegReader.communication.OptoHeadTest.ResultOk))
{
log.Debug("SlotSetTestMode successful");
resultStr = string.Format($"Serial No: {resultStr}");
resultStr = string.Format($"SlotSetTestMode: {resultStr}");
error = CommErr.None;
}
else
{
resultStr = "Failed Read Serial No";
resultStr = "Failed Set Test Mode";
}
return error;
}
@ -911,12 +935,12 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
if (!string.IsNullOrEmpty(resultStr) && resultStr.Equals(TBF.Rig.RegisterReaders.GenesisRegReader.communication.OptoHeadTest.ResultOk))
{
log.Debug("SlotLogin successful");
resultStr = string.Format($"Serial No: {resultStr}");
resultStr = string.Format($"SlotLogin: {resultStr}");
error = CommErr.None;
}
else
{
resultStr = "Failed Read Serial No";
resultStr = "Failed SlotLogin";
}
return error;
}
@ -928,7 +952,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
if (!string.IsNullOrEmpty(resultStr) && resultStr.Equals(TBF.Rig.RegisterReaders.GenesisRegReader.communication.OptoHeadTest.ResultOk))
{
log.Debug("SlotSetPassword successful");
resultStr = string.Format($"Serial No: {resultStr}");
resultStr = string.Format($"SlotSetPassword: {resultStr}");
error = CommErr.None;
}
else
@ -944,13 +968,13 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
PcbReadResult pcbReadSlot = iHead.OptoHeadTest.PCB_ReadSlot();
if (pcbReadSlot.Success)
{
log.Debug("SlotSetPassword successful");
resultStr = string.Format($"Serial No: {pcbReadSlot.PcbId}");
log.Debug("SlotPCBSlot successful");
resultStr = string.Format($"SlotPCBSlot: {pcbReadSlot.PcbId}");
error = CommErr.None;
}
else
{
resultStr = "Failed Read Serial No";
resultStr = "Failed SlotPCBSlot";
}
return error;
}
@ -961,8 +985,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
resultStr = iHead.OptoHeadTest.ConnectSlot();
if (!string.IsNullOrEmpty(resultStr))
{
log.Debug("SlotSetPassword successful");
resultStr = string.Format($"Serial No: {resultStr}");
log.Debug("SlotConnect successful");
resultStr = string.Format($"SlotConnect: {resultStr}");
error = CommErr.None;
}
else
@ -984,8 +1008,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
resultStr = iHead.OptoHeadTest.InitialiseSlot();
if (!string.IsNullOrEmpty(resultStr))
{
log.Debug("SlotSetPassword successful");
resultStr = string.Format($"Serial No: {resultStr}");
log.Debug("SlotInitialize successful");
resultStr = string.Format($"SlotInitialize: {resultStr}");
error = CommErr.None;
}
else