tbf/TestBenchFramework/BenchControl/Operations/CheckUIOp.cs

116 lines
4.0 KiB
C#

///
/// Copyright (c) 2013-2015 Sensus Metering Systems
///
using log4net;
using TBF.UiBridge;
namespace TBF.BenchControl.Operations
{
/// <summary>
/// Implements User Interface input for the state machine.
/// UI inserts commands int a queue (FIFO buffer).
/// UiBridgeOp class reads the queue and generates events that
/// in turn control state transitions in the state machine.
/// </summary>
public class CheckUIOp : IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(CheckUIOp));
public override string ToString() { return "CheckUIOp(" + clearInputQueue.ToString() + ")"; }
/// Set by constructors
bool clearInputQueue;
/// <summary>
/// Check input from UI for the state machine.
/// Events: Start,Stop,Cycle,Purge,LetOutLine,LetOutBalance,TestOpticalHeads,ResetResults,Calibration,SensitivityTest
/// </summary>
/// <param name="obj">true = clear queue on start</param>
public CheckUIOp(bool clearInputQueue)
{
this.clearInputQueue = clearInputQueue;
}
public CheckUIOp()
: this(false)
{
}
void UiEventHandlerMethod(UI2BenchCmd cmd)
{
lock (Bridge.Ui2MachineQueue)
{
Bridge.Ui2MachineQueue.Enqueue(cmd);
}
}
public void Start()
{
if (clearInputQueue)
{
lock (Bridge.Ui2MachineQueue)
{
Bridge.Ui2MachineQueue.Clear();
}
}
}
public Event Run()
{
if (Bridge.Ui2MachineQueue.Count <= 0) return Event.None;
UI2BenchCmd cmd;
lock (Bridge.Ui2MachineQueue)
{
if (Bridge.Ui2MachineQueue.Contains(UI2BenchCmd.Stop))
{
do {
cmd = Bridge.Ui2MachineQueue.Dequeue();
}
while (cmd != UI2BenchCmd.Stop);
}
else
{
cmd = Bridge.Ui2MachineQueue.Dequeue();
}
}
switch (cmd)
{
/// Bench Control Panel buttons
case UI2BenchCmd.ReloadBatch: return Event.UiCmdReloadBatch;
case UI2BenchCmd.StartTest: return Event.UiCmdStartTest;
case UI2BenchCmd.StartQ1: return Event.UiCmdStartQ1;
case UI2BenchCmd.StartQ2: return Event.UiCmdStartQ2;
case UI2BenchCmd.StartQ3: return Event.UiCmdStartQ3;
case UI2BenchCmd.StartCycle: return Event.UiCmdStartCycle;
case UI2BenchCmd.Stop: return Event.UiCmdStop;
case UI2BenchCmd.PurgeBegin: return Event.UiCmdPurgeBegin;
case UI2BenchCmd.PurgeEnd: return Event.UiCmdPurgeEnd;
case UI2BenchCmd.DrainTank1: return Event.UiCmdDrainTank1;
case UI2BenchCmd.DrainTank2: return Event.UiCmdDrainTank2;
case UI2BenchCmd.DrainTank3: return Event.UiCmdDrainTank3;
case UI2BenchCmd.Break: return Event.UiCmdBreak;
case UI2BenchCmd.ResetResults: return Event.UiCmdResetResults;
case UI2BenchCmd.AcceptResults: return Event.UiCmdAcceptResults;
case UI2BenchCmd.Calibration: return Event.UiCmdCalibration;
case UI2BenchCmd.CameraTest: return Event.UiCmdCameraTest;
case UI2BenchCmd.SensitivityTest: return Event.UiCmdSensitivityTest;
case UI2BenchCmd.Custom: return Event.UiCmdCustom;
case UI2BenchCmd.Next: return Event.Next;
/// Test buttons
case UI2BenchCmd.B1: return Event.UiCmdB1;
case UI2BenchCmd.B2: return Event.UiCmdB2;
case UI2BenchCmd.B3: return Event.UiCmdB3;
default: return Event.None;
}
}
public void Stop()
{
}
}
}