/// /// Copyright (c) 2013-2018 Sensus Slovensko a.s. /// using log4net; using TBF.UiBridge; namespace TBF.BenchControl.Operations { /// /// 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. /// 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; /// /// Check input from UI for the state machine. /// Events: Start,Stop,Cycle,Purge,LetOutLine,LetOutBalance,TestOpticalHeads,ResetResults,Calibration,SensitivityTest /// /// true = clear queue on start 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() { UI2BenchCmd cmd; lock (Bridge.Ui2MachineQueue) { if (Bridge.Ui2MachineQueue.Count <= 0) return Event.None; if (Bridge.Ui2MachineQueue.Contains(UI2BenchCmd.Stop)) { do { cmd = Bridge.Ui2MachineQueue.Dequeue(); } while (cmd != UI2BenchCmd.Stop); } else if (Bridge.Ui2MachineQueue.Contains(UI2BenchCmd.Shutdown)) { do { cmd = Bridge.Ui2MachineQueue.Dequeue(); } while (cmd != UI2BenchCmd.Shutdown); } 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.StopDrainingTank1: return Event.UiCmdStopDrainingTank1; case UI2BenchCmd.StopDrainingTank2: return Event.UiCmdStopDrainingTank2; case UI2BenchCmd.StopDrainingTank3: return Event.UiCmdStopDrainingTank3; case UI2BenchCmd.Break: return Event.UiCmdBreak; case UI2BenchCmd.ResetResults: return Event.UiCmdResetResults; case UI2BenchCmd.AcceptResults: return Event.UiCmdAcceptResults; case UI2BenchCmd.Shutdown: return Event.UiCmdShutdown; 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() { } } }