114 lines
3.9 KiB
C#
114 lines
3.9 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.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.UiCmdEmptyTank1;
|
|
case UI2BenchCmd.DrainTank2: return Event.UiCmdEmptyTank2;
|
|
case UI2BenchCmd.DrainTank3: return Event.UiCmdEmptyTank3;
|
|
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.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()
|
|
{
|
|
}
|
|
}
|
|
}
|