Files
tbf/TBF/Rig/RegisterReaders/PoseidonReader/implementations/PoseidonImplHeadTestCtrl.cs
T
michal f1e6e94450 work backup
- Register Reader Poseidon works
- Smart Form - wrong functionality
- refactoring
2025-11-06 14:11:13 +01:00

136 lines
5.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web.UI.WebControls;
using System.Windows.Forms;
using Common;
using TBF.Rig.Generic;
using TBF.Rig.RegisterReaders.iPerlReaderUNI.common;
using TBF.Rig.RegisterReaders.PoseidonReader.communication;
using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common;
using OptoReceivedEventArgs = TBF.Rig.RegisterReaders.CommonRR.IPerl.communication.OptoReceivedEventArgs;
namespace TBF.Rig.RegisterReaders.PoseidonReader.implementations
{
public class PoseidonImplHeadTestCtrl : IUniHeadTestCtrl
{
// ----------MEMBER VARIABLES--------------
Thread optoThread;
public enum Operations
{
[Description("ReadSerialNo")]ReadSerialNo,
[Description("SetTestModeON")]SetTestModeOn,
[Description("SetTestModeOFF")]SetTestModeOff,
[Description("")]Empty
}
public static readonly Dictionary<string, Operations> ItemsOperations = new Dictionary<string, Operations>
{
{"Read Serial No", Operations.ReadSerialNo},
{"Set Test Mode ON", Operations.SetTestModeOn},
{"Set Test Mode OFF", Operations.SetTestModeOff},
{"", Operations.Empty}
};
// ----------IMPLEMENTATION INTERFACE--------------
public IComponentCfg config { get; set; }
public ISmartReader ISmartReader { get; set; }
public bool stopWorkerThread { get; set; }
public event EventHandler<OptoReceivedEventArgs> OptoReceivedHandler;
public void Initialize()
{
stopWorkerThread = false;
}
public void Destroy()
{
stopWorkerThread = true;
if (optoThread != null)
{
optoThread.Abort();
}
OpticalHeadTest.StopOptoTestInputLoop(); // close opto port
if (this.config is PoseidonCfg poseidonCfg)
{
OpticalHeadTest.SetActiveMode(poseidonCfg);
}
}
public (string Name, string Value)[] GetComboOperationsPairs()
{
//return ItemsForIperlOperations.Select(kvp => (kvp.Key, kvp.Value)).ToArray();
return ItemsOperations.Select(kvp => (kvp.Key, kvp.Value.ToDescription())).ToArray();
}
public void CommandTestButtonClick(object sender, MouseEventArgs e, Arguments a)
{
a.RfidOutputListBox.Items.Clear();
using (Tools.LogChecker logChecker = new Tools.LogChecker("RfidData", log4net.Core.Level.Debug))
{
ListItem rfidListItem = new ListItem();
rfidListItem.Attributes.Add("style", "font-weight:bold");
Operations selectedOperation;
if(!ItemsOperations.TryGetValue((string)a.RfidCommandComboBox.SelectedValue, out selectedOperation))
selectedOperation = Operations.Empty;
if (this.config is PoseidonCfg poseidonCfg)
{
switch (selectedOperation)
{
case Operations.ReadSerialNo:
rfidListItem.Text = $"ReadSerialNo: {OpticalHeadTest.ReadRequest_SerialNo(poseidonCfg)}";
break;
case Operations.SetTestModeOn:
rfidListItem.Text = $"SetTestMode: {OpticalHeadTest.SetTestMode(poseidonCfg)}";
//Do start thread
a.OptoListBox.Items.Clear();
stopWorkerThread = false;
optoThread = new Thread(OptoWorker);
if (!optoThread.IsAlive)
{
OpticalHeadTest.StartOptotestInputLoop(poseidonCfg,OptoReceivedHandler); // open opto port
optoThread.Start();
}
break;
case Operations.SetTestModeOff:
//Do stop thread
// rfidListItem.Text = OpticalHeadTest.SetActiveMode(_iPerlReader);
stopWorkerThread = true;
OpticalHeadTest.StopOptoTestInputLoop(); // close opto port
//Do switch off test mode
rfidListItem.Text = $"SetActiveMode: {OpticalHeadTest.SetActiveMode(poseidonCfg)}";
break;
default:
rfidListItem.Text = @"--";
break;
}
}
a.RfidOutputListBox.Items.Add(rfidListItem);
a.RfidOutputListBox.Items.AddRange(logChecker.Messages.ToArray());
}
}
public void OptoWorker()
{
while (!this.stopWorkerThread)
{
Thread.Sleep(250);
if (this.stopWorkerThread)
break;
}
}
public void CloseOptoWorker()
{
this.stopWorkerThread = true;
}
}
}