Refactor `ISmartReader` and related classes to support `SmartHeadsUni`. Remove redundant `IperlHeadsUni` references and introduce `SmartMeterFlyingStartMassCollection` functionality. Enhance regex-based head position extraction.
194 lines
7.5 KiB
C#
194 lines
7.5 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Web.UI.WebControls;
|
|
using System.Windows.Forms;
|
|
using TBF.Rig.RegisterReaders.CommonRR.IPerl.communication;
|
|
using TBF.Rig.RegisterReaders.iPerlReaderUNI.test;
|
|
using TBF.Rig.Sequences;
|
|
using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common;
|
|
|
|
namespace TBF.Rig.RegisterReaders.PoseidonReader
|
|
{
|
|
public partial class PoseidonHeadTestCtrl : UserControl
|
|
{
|
|
PoseidonCfg config;
|
|
ISmartReader _iSmartReader;
|
|
Thread optoThread;
|
|
|
|
private bool stopWorkerThread;
|
|
public event EventHandler<OptoReceivedEventArgs> OptoReceivedHandler;
|
|
|
|
public PoseidonHeadTestCtrl(PoseidonCfg config)
|
|
{
|
|
this.config = config;
|
|
InitializeComponent();
|
|
if (config == null) return;
|
|
|
|
//TODO fix possibility set test method in config
|
|
//iPerlCommunicationForm.cfg = new TestMethodCfg(null); // default values for iPerlCommunication
|
|
|
|
foreach(var head in ProcessData.SmartHeadsUni)
|
|
{
|
|
if (head != null && head.Name == config.Name) { _iSmartReader = head; }
|
|
}
|
|
|
|
rfidCommandComboBox.DisplayMember = "Name";
|
|
rfidCommandComboBox.ValueMember = "Value";
|
|
var items = new[]
|
|
{
|
|
new {Name = "Read PCB", Value = "ReadPCB" },
|
|
new {Name = "Set Test Mode", Value = "SetTestMode" },
|
|
new {Name = "Set Active Mode", Value = "SetActiveMode" },
|
|
#if DEBUG
|
|
new {Name = "Start Read Opto Data", Value = "ReadOptoData" },
|
|
new {Name = "Stop Read Opto Data", Value = "StopReadOptoData" },
|
|
#endif
|
|
new {Name = " ", Value = "" },
|
|
new {Name = "Reset NFC Head", Value = "ResetNfcHead" },
|
|
new {Name = "Set NFC Head Interface", Value = "SetNfcHead" },
|
|
new {Name = "Set RFID Head interface", Value = "SetRfidHead" }
|
|
};
|
|
/*
|
|
// CTRL+ALT+double click - hidden poweruser menu
|
|
if (((Keyboard.ModifierKeys & Keys.Control) == Keys.Control) && ((Keyboard.ModifierKeys & Keys.Alt) == Keys.Alt) && Users.CurrentUser.AuthorizedAs == AuthorizedAs.PowerUser)
|
|
{
|
|
Array.Resize(ref items, items.Length + 1);
|
|
items[items.Length - 1] = new { Name = "Kluc", Value = "Kluc" };
|
|
}
|
|
*/
|
|
rfidCommandComboBox.DataSource = items;
|
|
|
|
stopWorkerThread = false;
|
|
|
|
OptoReceivedHandler += (EventHandler<OptoReceivedEventArgs>)((sndr, args) =>
|
|
{
|
|
if (this.InvokeRequired)
|
|
this.Invoke((Delegate)new EventHandler<OptoReceivedEventArgs>(this.OnOptoReceived2), sndr, (object)args);
|
|
else
|
|
this.OnOptoReceived2(sndr, args);
|
|
});
|
|
}
|
|
|
|
public void OnOptoReceived2(object sender, OptoReceivedEventArgs args)
|
|
{
|
|
optoListBox.Items.Insert(0,args.Data);
|
|
}
|
|
|
|
private void CommandTestButtonClick(object sender, MouseEventArgs e)
|
|
{
|
|
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");
|
|
switch (rfidCommandComboBox.SelectedValue)
|
|
{
|
|
case "ReadPCB":
|
|
// rfidListItem.Text = $"PCB: {OpticalHeadTest.ReadRequest_PCB(_iPerlReader)}";
|
|
break;
|
|
case "SetTestMode":
|
|
// rfidListItem.Text = OpticalHeadTest.SetTestMode(_iPerlReader);
|
|
// optoListBox.Items.Clear();
|
|
// stopWorkerThread = false;
|
|
// optoThread = new Thread(OptoWorker);
|
|
// if (!optoThread.IsAlive)
|
|
// {
|
|
// _iPerlReader.StartDataStreamProcessing(); // open opto port
|
|
// optoThread.Start();
|
|
// }
|
|
break;
|
|
case "SetActiveMode":
|
|
// rfidListItem.Text = OpticalHeadTest.SetActiveMode(_iPerlReader);
|
|
// stopWorkerThread = true;
|
|
// _iPerlReader.StopDataStreamProcessing(); // close opto port
|
|
break;
|
|
case "ResetNfcHead":
|
|
_iSmartReader.ResetNfcInterface();
|
|
break;
|
|
case "SetNfcHead":
|
|
_iSmartReader.SetNfcInterface();
|
|
break;
|
|
case "SetRfidHead":
|
|
_iSmartReader.SetRfidInterface();
|
|
break;
|
|
case "ReadOptoData":
|
|
optoListBox.Items.Clear();
|
|
stopWorkerThread = false;
|
|
optoThread = new Thread(OptoWorker);
|
|
if (optoThread.IsAlive)
|
|
{
|
|
stopWorkerThread = true;
|
|
_iSmartReader.StopDataStreamProcessing(); // close opto port
|
|
}
|
|
if (!optoThread.IsAlive)
|
|
{
|
|
_iSmartReader.StartDataStreamProcessing(); // open opto port
|
|
optoThread.Start();
|
|
}
|
|
break;
|
|
case "StopReadOptoData":
|
|
stopWorkerThread = true;
|
|
_iSmartReader.StopDataStreamProcessing(); // close opto port
|
|
break;
|
|
}
|
|
rfidOutputListBox.Items.Add(rfidListItem);
|
|
rfidOutputListBox.Items.AddRange(logChecker.Messages.ToArray());
|
|
}
|
|
}
|
|
|
|
private void OptoWorker()
|
|
{
|
|
while (!this.stopWorkerThread)
|
|
{
|
|
Thread.Sleep(250);
|
|
if (this.stopWorkerThread)
|
|
break;
|
|
|
|
try
|
|
{
|
|
string buffer = _iSmartReader.ReadOptoData();
|
|
if (string.IsNullOrEmpty(buffer))
|
|
{
|
|
this.OnOptoReceived((object)this, new OptoReceivedEventArgs("."));
|
|
}
|
|
else
|
|
OnOptoReceived((object)this, new OptoReceivedEventArgs(buffer));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.OnOptoReceived((object)this, new OptoReceivedEventArgs(ex.Message));
|
|
}
|
|
}
|
|
}
|
|
|
|
public void OnOptoReceived(object sender, OptoReceivedEventArgs args)
|
|
{
|
|
if (this.OptoReceivedHandler == null)
|
|
return;
|
|
try
|
|
{
|
|
this.OptoReceivedHandler(sender, args);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
|
|
private void UserControl_Load(object sender, EventArgs e)
|
|
{
|
|
this.ParentForm.FormClosing += new FormClosingEventHandler(ParentForm_FormClosing);
|
|
}
|
|
|
|
void ParentForm_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
//OnHandleDestroyed(new EventArgs());
|
|
stopWorkerThread = true;
|
|
if (optoThread != null)
|
|
{
|
|
optoThread.Abort();
|
|
}
|
|
}
|
|
}
|
|
}
|