diff --git a/Config/Properties/AssemblyInfo.cs b/Config/Properties/AssemblyInfo.cs
index 48c280508..e9ea189d1 100644
--- a/Config/Properties/AssemblyInfo.cs
+++ b/Config/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.14.595.0")]
-[assembly: AssemblyFileVersion("2.14.595.0")]
+[assembly: AssemblyVersion("2.15.619.0")]
+[assembly: AssemblyFileVersion("2.15.619.0")]
diff --git a/Results/Properties/AssemblyInfo.cs b/Results/Properties/AssemblyInfo.cs
index c40cc5538..47d6a0e99 100644
--- a/Results/Properties/AssemblyInfo.cs
+++ b/Results/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.14.619.0")]
-[assembly: AssemblyFileVersion("2.14.619.0")]
+[assembly: AssemblyVersion("2.15.619.0")]
+[assembly: AssemblyFileVersion("2.15.619.0")]
diff --git a/TestBenchFramework/BenchControl/TbfComponents.cs b/TestBenchFramework/BenchControl/TbfComponents.cs
index 4ec5e1b01..ccb1bb150 100644
--- a/TestBenchFramework/BenchControl/TbfComponents.cs
+++ b/TestBenchFramework/BenchControl/TbfComponents.cs
@@ -54,7 +54,8 @@ namespace TBF.BenchControl
Factories.Add(new TestMethods.FlyingStartMassCollection.Single.Factory());
Factories.Add(new TestMethods.FlyingStartMassCollection.Compound.Factory());
Factories.Add(new TestMethods.FlyingStartMassCollection.HeatMeters.Factory());
- Factories.Add(new TestMethods.LeakTest.TestMethodFactory());
+ Factories.Add(new TestMethods.GrabImage.Factory());
+ Factories.Add(new TestMethods.LeakTest.TestMethodFactory());
Factories.Add(new TestMethods.LiveStream.Factory());
Factories.Add(new TestMethods.OuterLoop.Start.Factory());
Factories.Add(new TestMethods.OuterLoop.End.Factory());
diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/Cfg.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Cfg.cs
new file mode 100644
index 000000000..e8cfb1d7a
--- /dev/null
+++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Cfg.cs
@@ -0,0 +1,43 @@
+///
+/// Copyright (c) 2017 Sensus Metering Systems
+///
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Xml.Serialization;
+using TBF.BenchControl.Generic;
+using TBF.Resources;
+
+namespace TBF.BenchControl.TestMethods.GrabImage
+{
+ public class Cfg : ComponentCfgBase, Generic.IComponentCfg
+ {
+ public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(Cfg) })[0];
+ protected override XmlSerializer GetSerializer() { return Serializer; }
+
+ public IComponentCfgCtrl GetControl() { return new CfgCtrl(); }
+
+
+ public bool BlackAndWhite;
+ public bool LowResolution;
+
+
+ /// Private parameterless constructor invoked by all other (public) constructors
+ Cfg() {}
+
+ public Cfg(IComponentFactory factory, string name)
+ : this()
+ {
+ this.Factory = factory;
+ Name = name;
+ ParentName = string.Empty;
+ BlackAndWhite = false;
+ LowResolution = false;
+ }
+
+ public string ToString(int i)
+ {
+ return string.Format("Name={0}, B&W={1}, LowRes={2}", Name, BlackAndWhite, LowResolution);
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.cs
new file mode 100644
index 000000000..7af31cfba
--- /dev/null
+++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.cs
@@ -0,0 +1,82 @@
+///
+/// Copyright (c) 2017 Sensus Metering Systems
+///
+using System;
+using System.Windows.Forms;
+using log4net;
+using TBF.BenchControl.Generic;
+
+namespace TBF.BenchControl.TestMethods.GrabImage
+{
+ public partial class CfgCtrl : UserControl, IComponentCfgCtrl
+ {
+ static readonly ILog log = LogManager.GetLogger(typeof(CfgCtrl));
+
+ public bool ShowMore { get { return false; } }
+
+ Cfg config;
+ public IComponentCfg Config
+ {
+ get { return config as IComponentCfg; }
+ set
+ {
+ config = value as Cfg;
+ Redraw();
+ }
+ }
+
+ public CfgCtrl()
+ {
+ InitializeComponent();
+ }
+
+ private void EntryFormCfgCtrl_Load(object sender, EventArgs e)
+ {
+ Redraw();
+ }
+
+ public void Closing()
+ {
+ }
+
+ void Redraw()
+ {
+ if (config == null) return; /// Control was not loaded, settings were not changed
+ classNameLabel.Text = config.Factory.ClassName;
+ nameTextBox.Text = config.Name;
+ hiResolutionCheckBox.Checked = config.LowResolution;
+ }
+
+ public void Unlock()
+ {
+ nameTextBox.Enabled = true;
+ hiResolutionCheckBox.Enabled = true;
+ }
+
+ public CfgUpdateFlags VerifyCfg(ref string message)
+ {
+ return CfgUpdateFlags.None;
+ }
+
+ public CfgUpdateFlags UpdateCfg()
+ {
+ CfgUpdateFlags flags = CfgUpdateFlags.None;
+
+ if (config == null) return CfgUpdateFlags.Error; /// Control was not loaded, settings were not changed
+
+ if (config.Name != nameTextBox.Text)
+ {
+ config.Name = nameTextBox.Text;
+ flags |= (CfgUpdateFlags.AnyChange | CfgUpdateFlags.RestartRqrd);
+ }
+
+ if (config.LowResolution != hiResolutionCheckBox.Checked)
+ {
+ config.LowResolution = hiResolutionCheckBox.Checked;
+ flags |= (CfgUpdateFlags.AnyChange | CfgUpdateFlags.RestartRqrd);
+ }
+
+ return flags;
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.designer.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.designer.cs
new file mode 100644
index 000000000..08903eb25
--- /dev/null
+++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.designer.cs
@@ -0,0 +1,97 @@
+///
+/// Copyright (c) 2017 Sensus Metering Systems
+///
+namespace TBF.BenchControl.TestMethods.GrabImage
+{
+ partial class CfgCtrl
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.nameTextBox = new System.Windows.Forms.TextBox();
+ this.nameLabel = new System.Windows.Forms.Label();
+ this.classNameLabel = new System.Windows.Forms.Label();
+ this.hiResolutionCheckBox = new System.Windows.Forms.CheckBox();
+ this.SuspendLayout();
+ //
+ // nameTextBox
+ //
+ this.nameTextBox.Enabled = false;
+ this.nameTextBox.Location = new System.Drawing.Point(134, 69);
+ this.nameTextBox.Name = "nameTextBox";
+ this.nameTextBox.Size = new System.Drawing.Size(130, 20);
+ this.nameTextBox.TabIndex = 7;
+ //
+ // nameLabel
+ //
+ this.nameLabel.AutoSize = true;
+ this.nameLabel.Location = new System.Drawing.Point(24, 72);
+ this.nameLabel.Name = "nameLabel";
+ this.nameLabel.Size = new System.Drawing.Size(35, 13);
+ this.nameLabel.TabIndex = 6;
+ this.nameLabel.Text = "Name";
+ //
+ // classNameLabel
+ //
+ this.classNameLabel.AutoSize = true;
+ this.classNameLabel.Location = new System.Drawing.Point(131, 43);
+ this.classNameLabel.Name = "classNameLabel";
+ this.classNameLabel.Size = new System.Drawing.Size(83, 13);
+ this.classNameLabel.TabIndex = 5;
+ this.classNameLabel.Text = "ComonentName";
+ //
+ // hiResolutionCheckBox
+ //
+ this.hiResolutionCheckBox.AutoSize = true;
+ this.hiResolutionCheckBox.Enabled = false;
+ this.hiResolutionCheckBox.Location = new System.Drawing.Point(134, 104);
+ this.hiResolutionCheckBox.Name = "hiResolutionCheckBox";
+ this.hiResolutionCheckBox.Size = new System.Drawing.Size(96, 17);
+ this.hiResolutionCheckBox.TabIndex = 8;
+ this.hiResolutionCheckBox.Text = "High resolution";
+ this.hiResolutionCheckBox.UseVisualStyleBackColor = true;
+ //
+ // CfgCtrl
+ //
+ this.Controls.Add(this.hiResolutionCheckBox);
+ this.Controls.Add(this.nameTextBox);
+ this.Controls.Add(this.nameLabel);
+ this.Controls.Add(this.classNameLabel);
+ this.Name = "CfgCtrl";
+ this.Size = new System.Drawing.Size(300, 240);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TextBox nameTextBox;
+ private System.Windows.Forms.Label nameLabel;
+ private System.Windows.Forms.Label classNameLabel;
+ private System.Windows.Forms.CheckBox hiResolutionCheckBox;
+ }
+}
diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.resx b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/CfgCtrl.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/Component.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Component.cs
new file mode 100644
index 000000000..377469ebf
--- /dev/null
+++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Component.cs
@@ -0,0 +1,39 @@
+///
+/// Copyright (c) 2017 Sensus Metering Systems
+///
+using System;
+using System.Collections.Generic;
+using log4net;
+using Config.Entities;
+using TBF.BenchControl;
+
+namespace TBF.BenchControl.TestMethods.GrabImage
+{
+ public class Component : ComponentBase, GenericDevices.ITestMethod
+ {
+ private static readonly ILog log = LogManager.GetLogger(typeof(Component));
+ public override string ToString() { return string.Format("TestMethods.LiveStream({0})", Cfg.ToString(1)); }
+
+ public bool Evaluate(Test test) { return false; }
+ public bool Publish(Test test) { return false; }
+ public bool CanTest(MetersKind meters) { return true; }
+
+ Cfg cfg;
+
+ public Component()
+ {
+ }
+
+ public Component(Generic.IComponentCfg cfg)
+ : base(cfg)
+ {
+ log.Debug(this.ToString());
+ this.cfg = cfg as Cfg;
+ }
+
+ public IList Execute(Test test, bool bdummy, int idummy)
+ {
+ return (new GrabImageSeq()).Execute(test, cfg.LowResolution);
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/Factory.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Factory.cs
new file mode 100644
index 000000000..cfd07f699
--- /dev/null
+++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/Factory.cs
@@ -0,0 +1,26 @@
+///
+/// Copyright (c) 2017 Sensus Metering Systems
+///
+using System.Collections.Generic;
+using TBF.BenchControl.Generic;
+
+namespace TBF.BenchControl.TestMethods.GrabImage
+{
+ public class Factory : IComponentFactory
+ {
+ public string ClassName { get { return this.GetType().Namespace.Substring(17); } }
+
+ public void ResetStaticProperties() { Component.ResetStaticProperties(); }
+
+ public IComponent DummyComponent() { return new Component(); }
+
+ public IComponent GetComponent(IComponentCfg cfg, IList components) { return new Component(cfg); }
+
+ public IComponentCfg DefaultConfig() { return new Cfg(this, this.GetType().Namespace.Substring(29)); }
+
+ public IComponentCfg CmpntCfgFromCmpntEntity(Config.Entities.Component component)
+ {
+ return ComponentCfgBase.CreateFromDbEntity(Cfg.Serializer, component, this);
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/TestMethods/GrabImage/GrabImageSeq.cs b/TestBenchFramework/BenchControl/TestMethods/GrabImage/GrabImageSeq.cs
new file mode 100644
index 000000000..ca2d562c8
--- /dev/null
+++ b/TestBenchFramework/BenchControl/TestMethods/GrabImage/GrabImageSeq.cs
@@ -0,0 +1,78 @@
+///
+/// Copyright (c) 2017 Sensus Metering Systems
+///
+using System.Collections.Generic;
+using log4net;
+using Config.Entities;
+using TBF.UiBridge;
+
+namespace TBF.BenchControl.TestMethods.GrabImage
+{
+ public class GrabImageSeq : Sequences.SequenceBase
+ {
+ private static readonly ILog log = LogManager.GetLogger(typeof(GrabImageSeq));
+
+
+ public IList Execute(Test test, bool hiResolution)
+ {
+ IList e = new List(); /// Events from currently running operations
+ Event retVal = Event.Done;
+
+ /// Operations
+ checkUiOp = new Operations.CheckUIOp(true);
+
+ IList cameras = new List();
+ IList grabImagesOp = new List();
+
+ TestProgressEventArgs.SetEstimatedTimes(new int[] { 60, 0, 0, 0, 0, 0, 60, 0 });
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, 1, Config.Entities.Progress.JustStarted));
+
+ //------------------------------------------------
+ Bridge.OnActivity(this, test.Method);
+ //------------------------------------------------
+ State state = State.Create(string.Format("{0}({1}) : Grabbing images", test.Method, test.Name))
+ .AddOperation(checkUiOp);
+
+ foreach (var rr in sensPath.RegisterReaders)
+ {
+ if (rr is GenericDevices.IRoi)
+ {
+ GenericDevices.ICamera camera = (rr as GenericDevices.IRoi).Camera;
+ if (!cameras.Contains(camera))
+ {
+ cameras.Add(camera);
+ grabImagesOp.Add(camera.LiveStreamOp(hiResolution));
+ }
+ }
+ }
+
+ state.AddOperations(grabImagesOp);
+
+ state.EnterState();
+ do
+ {
+ e = StateMachine.WaitRunDevsRunOps();
+
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, 1, Config.Entities.Progress.Test));
+
+ if (e.Contains(Event.Error))
+ {
+ break;
+ }
+
+ if (TestAndLogUiCmdStop(test,e))
+ {
+ break;
+ }
+ }
+ while (true);
+
+ Bridge.OnTestProgress(this, new TestProgressEventArgs(test, 1, Config.Entities.Progress.Completed));
+
+ /// Create a list with one item 'retVal' (default is Event.Done) and return it
+ IList retList = new List(1);
+ retList.Add(retVal);
+ return retList;
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/TestMethods/LiveStream/LiveStreamSeq.cs b/TestBenchFramework/BenchControl/TestMethods/LiveStream/LiveStreamSeq.cs
index 954dc8b02..a994ffb14 100644
--- a/TestBenchFramework/BenchControl/TestMethods/LiveStream/LiveStreamSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/LiveStream/LiveStreamSeq.cs
@@ -41,9 +41,9 @@ namespace TBF.BenchControl.TestMethods.LiveStream
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, 1, Config.Entities.Progress.JustStarted));
//------------------------------------------------
- Bridge.OnActivity(this, "Live image");
+ Bridge.OnActivity(this, test.Method);
//------------------------------------------------
- State.Create("LiveStreamSeq : Live image")
+ State.Create(string.Format("{0}({1}) : Live stream", test.Method, test.Name))
.AddOperation(checkUiOp)
.AddOperations(liveStreamOps)
.EnterState();
diff --git a/TestBenchFramework/Properties/AssemblyInfo.cs b/TestBenchFramework/Properties/AssemblyInfo.cs
index 93d10c04e..684a91a4c 100644
--- a/TestBenchFramework/Properties/AssemblyInfo.cs
+++ b/TestBenchFramework/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
-[assembly: AssemblyVersion("2.14.619.1")]
-[assembly: AssemblyFileVersion("2.14.619.1")]
+[assembly: AssemblyVersion("2.15.624.1")]
+[assembly: AssemblyFileVersion("2.15.624.1")]
diff --git a/TestBenchFramework/TBF.csproj b/TestBenchFramework/TBF.csproj
index dc49cfb6e..dc5bb8ac2 100644
--- a/TestBenchFramework/TBF.csproj
+++ b/TestBenchFramework/TBF.csproj
@@ -843,6 +843,16 @@
+
+
+ UserControl
+
+
+ CfgCtrl.cs
+
+
+
+
@@ -2064,6 +2074,9 @@
CycleDlg.cs
+
+ CfgCtrl.cs
+
IperlHeadCfgCtrl.cs