136 lines
5.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |