//Copyright 2012-2019 Keysight Technologies // //Licensed under the Apache License, Version 2.0 (the "License"); //you may not use this file except in compliance with the License. //You may obtain a copy of the License at // //http://www.apache.org/licenses/LICENSE-2.0 // //Unless required by applicable law or agreed to in writing, software //distributed under the License is distributed on an "AS IS" BASIS, //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. // This example step gets connection details between two entities (which can be a combination of Instruments and DUTs). // Steps to use this example: // 1. Add a simulated Instrument and a DUT. In this case, TwoPortInstrument and FourPortDUT can be added. // 2. Add a Connection in Settings >> Bench >> Connections using the Instruments/DUTs added in Step 1. It can contain a switch. // 3. Optionally, set any of the connections as Active by adding a Switch Step (E.g. SetSwitchMatrixStep). // Other Notes: // It can be extended further to perform manipulation or measurements or operations using connections // e.g. setting power on the DUT and measuring the same using an instrument. using System; using System.Collections.Generic; using System.Linq; using System.Text; using OpenTap; namespace OpenTap.Plugins.PluginDevelopment.InstrumentsAndDuts { [Display("Connection Usage", Groups: new[] { "Examples", "Plugin Development", "Instruments And Duts" }, Description: "Example step that operates on connections.")] public class ConnectionStep : TestStep { #region Settings public TwoPortInstrument SimInstrument { get; set; } public FourPortDut SimDut { get; set; } #endregion public override void Run() { // Find and display available connections between each of the instrument's ports and the DUT var ports = SimInstrument.GetConstProperties(); foreach (var port in ports) { var connections = port.GetConnectionsTo(SimDut); if (connections.Count() > 0) { foreach (var connection in connections) { string nameOfConnection = String.Empty; nameOfConnection = String.IsNullOrEmpty(connection.Name) ? "Not Specified" : connection.Name; if (connection.Via.Count > 0) // Indirect connection { Log.Info("Name: {0}, Connection: {1} <-> {2} <-> {3}, IsActive: {4}", nameOfConnection, connection.Port1, FlattenViaPoints(connection.Via), connection.Port2, connection.IsActive); } else // Direct connection { Log.Info("Name: {0}, Connection: {1} <-> {2}", nameOfConnection, connection.Port1, connection.Port2); } } } else { Log.Info("{0} does not have a connection to {1}.", port.ToString(), SimDut.Name); } } } private string FlattenViaPoints(List viaPoints) { StringBuilder sb = new StringBuilder(); foreach (var viaPoint in viaPoints) { sb.Append(String.Format("{0}-", viaPoint)); } return sb.ToString().TrimEnd('-' ); } } }