197 lines
7.7 KiB
C#
197 lines
7.7 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.Uni.SharedDialogs.SmartMetersCommunication.common;
|
||
|
|
|
||
|
|
namespace TBF.Rig.RegisterReaders.GenesisRegReader.implementations
|
||
|
|
{
|
||
|
|
public class GenesisImplHeadTestCtrl : IUniHeadTestCtrl<OptoReceivedEventArgs>
|
||
|
|
{
|
||
|
|
Thread optoThread;
|
||
|
|
GenesisSmartReader _genesiHead;
|
||
|
|
|
||
|
|
public GenesisSmartReader Head { get { return _genesiHead;} }
|
||
|
|
public ISmartReader ISmartReader { get; set; }
|
||
|
|
|
||
|
|
public bool stopWorkerThread { get; set; }
|
||
|
|
|
||
|
|
public event EventHandler<OptoReceivedEventArgs> OptoReceivedHandler;
|
||
|
|
|
||
|
|
public IComponentCfg config { get; set; }
|
||
|
|
|
||
|
|
public void Initialize()
|
||
|
|
{
|
||
|
|
stopWorkerThread = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void Destroy()
|
||
|
|
{
|
||
|
|
stopWorkerThread = true;
|
||
|
|
if (optoThread != null)
|
||
|
|
{
|
||
|
|
optoThread.Abort();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private const string StrReadPcbCmd = "ReadPCB";
|
||
|
|
private const string StrSetTestModeCmd = "SetTestMode";
|
||
|
|
private const string StrSetActiveModeCmd = "SetActiveMode";
|
||
|
|
private const string StrReadOptoDataCmd = "ReadOptoData";
|
||
|
|
private const string StrStopReadOptoDataCmd = "StopReadOptoData";
|
||
|
|
private const string StrResetNfcHeadCmd = "ResetNfcHead";
|
||
|
|
private const string StrSetNfcHeadCmd = "SetNfcHead";
|
||
|
|
private const string StrSetRfidHeadCmd = "SetRfidHead";
|
||
|
|
private const string StrEmptyCmd = "";
|
||
|
|
|
||
|
|
public enum Operations
|
||
|
|
{
|
||
|
|
[Description(StrReadPcbCmd)]ReadPcbCmd,
|
||
|
|
[Description(StrSetTestModeCmd)]SetTestModeCmd,
|
||
|
|
[Description(StrSetActiveModeCmd)]SetActiveModeCmd,
|
||
|
|
[Description(StrReadOptoDataCmd)]ReadOptoDataCmd,
|
||
|
|
[Description(StrStopReadOptoDataCmd)]StopReadOptoDataCmd,
|
||
|
|
[Description(StrResetNfcHeadCmd)]ResetNfcHeadCmd,
|
||
|
|
[Description(StrSetNfcHeadCmd)]SetNfcHeadCmd,
|
||
|
|
[Description(StrSetRfidHeadCmd)]SetRfidHeadCmd,
|
||
|
|
[Description(StrEmptyCmd)]EmptyCmd
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
private static readonly Dictionary<string, Operations> ItemsForIperlOperations = new Dictionary<string, Operations>
|
||
|
|
{
|
||
|
|
{"Read PCB", Operations.ReadPcbCmd},
|
||
|
|
{"Set Test Mode", Operations.SetTestModeCmd},
|
||
|
|
{"Set Active Mode", Operations.SetActiveModeCmd},
|
||
|
|
#if DEBUG
|
||
|
|
{"Start Read Opto Data", Operations.ReadOptoDataCmd},
|
||
|
|
{"Stop Read Opto Data", Operations.StopReadOptoDataCmd},
|
||
|
|
#endif
|
||
|
|
{" ", Operations.EmptyCmd},
|
||
|
|
{"Reset NFC Head", Operations.ResetNfcHeadCmd},
|
||
|
|
{"Set NFC Head Interface", Operations.SetNfcHeadCmd},
|
||
|
|
{"Set RFID Head interface", Operations.SetRfidHeadCmd}
|
||
|
|
};
|
||
|
|
|
||
|
|
public (string Name, string Value)[] GetComboOperationsPairs()
|
||
|
|
{
|
||
|
|
//return ItemsForIperlOperations.Select(kvp => (kvp.Key, kvp.Value)).ToArray();
|
||
|
|
return ItemsForIperlOperations.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(!ItemsForIperlOperations.TryGetValue((string)a.RfidCommandComboBox.SelectedValue, out selectedOperation))
|
||
|
|
selectedOperation = Operations.EmptyCmd;
|
||
|
|
bool isTestModeSuccessful = false;
|
||
|
|
switch (selectedOperation)
|
||
|
|
{
|
||
|
|
case Operations.ReadPcbCmd:
|
||
|
|
rfidListItem.Text = $"PCB: {Head.OptoHeadTest.ReadRequest_PCB()}";
|
||
|
|
break;
|
||
|
|
case Operations.SetTestModeCmd:
|
||
|
|
rfidListItem.Text = Head.OptoHeadTest.SetTestMode(ref isTestModeSuccessful);
|
||
|
|
a.OptoListBox.Items.Clear();
|
||
|
|
stopWorkerThread = false;
|
||
|
|
optoThread = new Thread(OptoWorker);
|
||
|
|
if (!optoThread.IsAlive)
|
||
|
|
{
|
||
|
|
a.ISmartReader.StartDataStreamProcessing(); // open opto port
|
||
|
|
optoThread.Start();
|
||
|
|
}
|
||
|
|
|
||
|
|
break;
|
||
|
|
case Operations.SetActiveModeCmd:
|
||
|
|
rfidListItem.Text = Head.OptoHeadTest.SetActiveMode( ref isTestModeSuccessful);
|
||
|
|
stopWorkerThread = true;
|
||
|
|
a.ISmartReader.StopDataStreamProcessing(); // close opto port
|
||
|
|
break;
|
||
|
|
case Operations.ResetNfcHeadCmd:
|
||
|
|
a.ISmartReader.ResetNfcInterface();
|
||
|
|
break;
|
||
|
|
case Operations.SetNfcHeadCmd:
|
||
|
|
a.ISmartReader.SetNfcInterface();
|
||
|
|
break;
|
||
|
|
case Operations.SetRfidHeadCmd:
|
||
|
|
a.ISmartReader.SetRfidInterface();
|
||
|
|
break;
|
||
|
|
case Operations.ReadOptoDataCmd:
|
||
|
|
a.OptoListBox.Items.Clear();
|
||
|
|
stopWorkerThread = false;
|
||
|
|
optoThread = new Thread(OptoWorker);
|
||
|
|
if (optoThread.IsAlive)
|
||
|
|
{
|
||
|
|
stopWorkerThread = true;
|
||
|
|
a.ISmartReader.StopDataStreamProcessing(); // close opto port
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!optoThread.IsAlive)
|
||
|
|
{
|
||
|
|
a.ISmartReader.StartDataStreamProcessing(); // open opto port
|
||
|
|
optoThread.Start();
|
||
|
|
}
|
||
|
|
|
||
|
|
break;
|
||
|
|
case Operations.StopReadOptoDataCmd:
|
||
|
|
stopWorkerThread = true;
|
||
|
|
a.ISmartReader.StopDataStreamProcessing(); // close opto port
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
a.RfidOutputListBox.Items.Add(rfidListItem);
|
||
|
|
a.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)
|
||
|
|
{
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|