diff --git a/PepperDashEssentials/PluginLoading/PluginLoading.cs b/PepperDashEssentials/PluginLoading/PluginLoading.cs
index 456c1dd1..405241a3 100644
--- a/PepperDashEssentials/PluginLoading/PluginLoading.cs
+++ b/PepperDashEssentials/PluginLoading/PluginLoading.cs
@@ -8,6 +8,7 @@ using Crestron.SimplSharp.Reflection;
using PepperDash.Core;
using PepperDash.Essentials.Core;
+using PepperDash.Essentials.Core.Plugins;
namespace PepperDash.Essentials
{
@@ -68,6 +69,11 @@ namespace PepperDash.Essentials
{
version = Global.AssemblyVersion;
assembly = Assembly.GetExecutingAssembly();
+ break;
+ }
+ case ("PepperDashEssentialsBase.dll"):
+ {
+
break;
}
case ("PepperDash_Core.dll"):
@@ -337,49 +343,21 @@ namespace PepperDash.Essentials
{
try
{
- var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Static);
- var loadPlugin = methods.FirstOrDefault(m => m.Name.Equals("LoadPlugin"));
- if (loadPlugin != null)
+ if (typeof(IPluginDeviceFactory).IsAssignableFrom(type))
{
- Debug.Console(2, "LoadPlugin method found in {0}", type.Name);
-
- var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static);
-
- var minimumVersion = fields.FirstOrDefault(p => p.Name.Equals("MinimumEssentialsFrameworkVersion"));
- if (minimumVersion != null)
- {
- Debug.Console(2, "MinimumEssentialsFrameworkVersion found");
-
- var minimumVersionString = minimumVersion.GetValue(null) as string;
-
- if (!string.IsNullOrEmpty(minimumVersionString))
- {
- var passed = Global.IsRunningMinimumVersionOrHigher(minimumVersionString);
-
- if (!passed)
- {
- Debug.Console(0, Debug.ErrorLogLevel.Error, "Plugin indicates minimum Essentials version {0}. Dependency check failed. Skipping Plugin", minimumVersionString);
- continue;
- }
- else
- {
- Debug.Console(0, Debug.ErrorLogLevel.Notice, "Passed plugin passed dependency check (required version {0})", minimumVersionString);
- }
- }
- else
- {
- Debug.Console(0, Debug.ErrorLogLevel.Warning, "MinimumEssentialsFrameworkVersion found but not set. Loading plugin, but your mileage may vary.");
- }
- }
- else
- {
- Debug.Console(0, Debug.ErrorLogLevel.Warning, "MinimumEssentialsFrameworkVersion not found. Loading plugin, but your mileage may vary.");
- }
-
- Debug.Console(0, Debug.ErrorLogLevel.Notice, "Adding plugin: {0}", loadedAssembly.Name);
- loadPlugin.Invoke(null, null);
+ var plugin = (IPluginDeviceFactory)Crestron.SimplSharp.Reflection.Activator.CreateInstance(type);
+ LoadCustomPlugin(plugin, loadedAssembly);
}
- }
+ else
+ {
+ var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Static);
+ var loadPlugin = methods.FirstOrDefault(m => m.Name.Equals("LoadPlugin"));
+ if (loadPlugin != null)
+ {
+ LoadCustomLegacyPlugin(type, loadPlugin, loadedAssembly);
+ }
+ }
+ }
catch (Exception e)
{
Debug.Console(2, "Load Plugin not found. {0} is not a plugin assembly. Exception: {1}", loadedAssembly.Name, e);
@@ -399,6 +377,75 @@ namespace PepperDash.Essentials
Debug.Console(0, "Done Loading Custom Plugin Types.");
}
+ ///
+ /// Loads a
+ ///
+ ///
+ static void LoadCustomPlugin(IPluginDeviceFactory plugin, LoadedAssembly loadedAssembly)
+ {
+ var passed = Global.IsRunningMinimumVersionOrHigher(plugin.MinimumEssentialsFrameworkVersion);
+
+ if (!passed)
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Error, "Plugin indicates minimum Essentials version {0}. Dependency check failed. Skipping Plugin", plugin.MinimumEssentialsFrameworkVersion);
+ return;
+ }
+ else
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Notice, "Passed plugin passed dependency check (required version {0})", plugin.MinimumEssentialsFrameworkVersion);
+ }
+
+ Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading plugin: {0}", loadedAssembly.Name);
+ plugin.LoadTypeFactories();
+ }
+
+ ///
+ /// Loads a a custom plugin via the legacy method
+ ///
+ ///
+ ///
+ static void LoadCustomLegacyPlugin(CType type, MethodInfo loadPlugin, LoadedAssembly loadedAssembly)
+ {
+ Debug.Console(2, "LoadPlugin method found in {0}", type.Name);
+
+ var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static);
+
+ var minimumVersion = fields.FirstOrDefault(p => p.Name.Equals("MinimumEssentialsFrameworkVersion"));
+ if (minimumVersion != null)
+ {
+ Debug.Console(2, "MinimumEssentialsFrameworkVersion found");
+
+ var minimumVersionString = minimumVersion.GetValue(null) as string;
+
+ if (!string.IsNullOrEmpty(minimumVersionString))
+ {
+ var passed = Global.IsRunningMinimumVersionOrHigher(minimumVersionString);
+
+ if (!passed)
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Error, "Plugin indicates minimum Essentials version {0}. Dependency check failed. Skipping Plugin", minimumVersionString);
+ return;
+ }
+ else
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Notice, "Passed plugin passed dependency check (required version {0})", minimumVersionString);
+ }
+ }
+ else
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Warning, "MinimumEssentialsFrameworkVersion found but not set. Loading plugin, but your mileage may vary.");
+ }
+ }
+ else
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Warning, "MinimumEssentialsFrameworkVersion not found. Loading plugin, but your mileage may vary.");
+ }
+
+ Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading legacy plugin: {0}", loadedAssembly.Name);
+ loadPlugin.Invoke(null, null);
+
+ }
+
///
/// Loads plugins
///
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/GenericComm.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/GenericComm.cs
index 1998f62e..86faab64 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/GenericComm.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/GenericComm.cs
@@ -13,12 +13,14 @@ using PepperDash.Essentials.Core.Config;
namespace PepperDash.Essentials.Core
{
+
+
///
/// Serves as a generic wrapper class for all styles of IBasicCommuncation ports
///
- public class
- GenericComm : ReconfigurableDevice
+ public class GenericComm : ReconfigurableDevice
{
+
EssentialsControlPropertiesConfig PropertiesConfig;
public IBasicCommunication CommPort { get; private set; }
@@ -29,6 +31,14 @@ namespace PepperDash.Essentials.Core
PropertiesConfig = CommFactory.GetControlPropertiesConfig(config);
CommPort = CommFactory.CreateCommForDevice(config);
+
+
+ }
+
+ public static IKeyed BuildDevice(DeviceConfig dc)
+ {
+ Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
+ return new GenericComm(dc);
}
public void SetPortConfig(string portConfig)
@@ -51,6 +61,22 @@ namespace PepperDash.Essentials.Core
ConfigWriter.UpdateDeviceConfig(config);
}
-
+
+ public class Factory : EssentialsDevice.Factory
+ {
+ #region IDeviceFactory Members
+
+ List TypeNames = new List() { "genericComm" };
+
+ #endregion
+
+ public override IKeyed BuildDevice(DeviceConfig dc)
+ {
+ Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
+ return new GenericComm(dc);
+ }
+ }
}
+
+
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/EssentialsDevice.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/EssentialsDevice.cs
new file mode 100644
index 00000000..88c62f48
--- /dev/null
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/EssentialsDevice.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+
+using PepperDash.Core;
+using PepperDash.Essentials.Core.Config;
+
+namespace PepperDash.Essentials.Core
+{
+ ///
+ /// Defines the basic needs for an EssentialsDevice to enable it to be build by an IDeviceFactory class
+ ///
+ public abstract class EssentialsDevice : Device
+ {
+ protected EssentialsDevice(string key)
+ : base(key)
+ {
+
+ }
+ }
+
+ public abstract class Factory : IDeviceFactory
+ {
+ #region IDeviceFactory Members
+
+ public List TypeNames { get; protected set; }
+
+ public virtual void LoadTypeFactories()
+ {
+ foreach (var typeName in TypeNames)
+ {
+ DeviceFactory.AddFactoryForType(typeName, BuildDevice);
+ }
+ }
+
+ #endregion
+
+ public abstract IKeyed BuildDevice(DeviceConfig dc);
+
+ protected Factory()
+ {
+ TypeNames = new List();
+ }
+ }
+}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/ReconfigurableDevice.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/ReconfigurableDevice.cs
index 3acfcac0..b19b40b5 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/ReconfigurableDevice.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/ReconfigurableDevice.cs
@@ -12,7 +12,7 @@ namespace PepperDash.Essentials.Core.Devices
///
///
///
- public abstract class ReconfigurableDevice : Device
+ public abstract class ReconfigurableDevice : EssentialsDevice
{
public event EventHandler ConfigChanged;
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs
index c07bc010..47947691 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs
@@ -87,4 +87,17 @@ namespace PepperDash.Essentials.Core
return null;
}
}
+
+
+ ///
+ /// Responsible for loading all of the device types
+ ///
+ public class CoreDeviceFactory
+ {
+ public CoreDeviceFactory()
+ {
+ var genComm = new GenericComm.Factory() as IDeviceFactory;
+ genComm.LoadTypeFactories();
+ }
+ }
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
index 3989722e..8125a667 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
@@ -132,6 +132,7 @@
+
@@ -156,8 +157,9 @@
-
+
+
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/IPluginDeviceConfig.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/IPluginDeviceConfig.cs
index 7ac894c6..b8fa03a3 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/IPluginDeviceConfig.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/IPluginDeviceConfig.cs
@@ -1,11 +1,28 @@
using PepperDash.Core;
using PepperDash.Essentials.Core.Config;
-namespace PepperDash.Essentials.Core.Plugins
+namespace PepperDash.Essentials.Core
{
- public interface IPluginDeviceConfig
+ ///
+ /// Defines a class that is capable of loading custom plugin device types
+ ///
+ public interface IPluginDeviceFactory : IDeviceFactory
{
+ ///
+ /// Required to define the minimum version for Essentials in the format xx.yy.zz
+ ///
string MinimumEssentialsFrameworkVersion { get; }
- IKeyed BuildDevice(DeviceConfig dc);
+
+ }
+
+ ///
+ /// Defines a class that is capable of loading device types
+ ///
+ public interface IDeviceFactory
+ {
+ ///
+ /// Will be called when the plugin is loaded by Essentials. Must add any new types to the DeviceFactory using DeviceFactory.AddFactoryForType() for each new type
+ ///
+ void LoadTypeFactories();
}
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/IRoutingInputsExtensions.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/IRoutingInputsExtensions.cs
deleted file mode 100644
index ad4a3458..00000000
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/IRoutingInputsExtensions.cs
+++ /dev/null
@@ -1,300 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-using Crestron.SimplSharpPro;
-using Crestron.SimplSharpPro.DM;
-
-using PepperDash.Core;
-
-
-namespace PepperDash.Essentials.Core
-{
- ///
- ///
- ///
- public static class IRoutingInputsExtensions
- {
- ///
- /// Gets any existing route for a destination, clears it, and then
- ///
- public static void ReleaseAndMakeRoute(this IRoutingInputs destination, IRoutingOutputs source, eRoutingSignalType signalType)
- {
- var sw = new Stopwatch();
- sw.Start();
-
- destination.ReleaseRoute();
-
- if (source == null) return;
- var newRoute = destination.GetRouteToSource(source, signalType);
- if (newRoute == null) return;
- RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(newRoute);
- Debug.Console(2, destination, "Executing new route");
- newRoute.ExecuteRoutes();
- sw.Stop();
- Debug.Console(2, destination, "Route took {0} ms", sw.ElapsedMilliseconds);
- }
-
- ///
- /// Will release the existing route on the destination
- ///
- ///
- ///
- public static void ReleaseRoute(this IRoutingInputs destination)
- {
- var current = RouteDescriptorCollection.DefaultCollection.RemoveRouteDescriptor(destination);
- if (current != null)
- {
- Debug.Console(2, destination, "Releasing current route: {0}", current.Source.Key);
- current.ReleaseRoutes();
- }
- }
-
-
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public static RouteDescriptor GetRouteToSource(this IRoutingInputs destination, IRoutingOutputs source, eRoutingSignalType signalType)
- {
- var routeTable = new RouteDescriptor (source, destination, signalType);
-
- Debug.Console(0, destination, "Attempting to build source route from {0}***", source.Key);
- if (!destination.GetRouteToSource(source, null, null, signalType, 0, routeTable))
- routeTable = null;
-
- Debug.Console(0, destination, "Route{0} discovered ***", routeTable == null ? " NOT" : "");
- return routeTable;
- }
-
- ///
- /// The recursive part of this. Will stop on each device, search its inputs for the
- /// desired source and if not found, invoke this function for the each input port
- /// hoping to find the source.
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- /// true if source is hit
- static bool GetRouteToSource(this IRoutingInputs destination, IRoutingOutputs source,
- RoutingOutputPort onSuccessOutputPort, List alreadyCheckedDevices,
- eRoutingSignalType signalType, int cycle, RouteDescriptor routeTable)
- {
- cycle++;
- Debug.Console(0, destination, "SelectInput-cycle {1}. Finding {2} route back to {0}", source.Key, cycle, signalType);
- var destDevInputTies = TieLineCollection.Default.Where(t =>
- t.DestinationPort.ParentDevice == destination && (t.Type == signalType || t.Type == eRoutingSignalType.AudioVideo));
-
- // find a direct tie
- var directTie = destDevInputTies.FirstOrDefault(
- t => !(t.SourcePort.ParentDevice is IRoutingInputsOutputs)
- && t.DestinationPort.ParentDevice == destination
- && t.SourcePort.ParentDevice == source);
- RoutingInputPort inputPort = null;
- if (directTie != null) // Found a tie directly to the source
- {
- Debug.Console(0, destination, "Found direct tie to {0}**", source.Key);
- inputPort = directTie.DestinationPort;
- }
- else // no direct-connect. Walk back devices.
- {
- Debug.Console(0, destination, "is not directly connected to {0}. Walking down tie lines", source.Key);
-
- // No direct tie? Run back out on the inputs' attached devices...
- // Only the ones that are routing devices
- var attachedMidpoints = destDevInputTies.Where(t => t.SourcePort.ParentDevice is IRoutingInputsOutputs);
- foreach (var inputTieToTry in attachedMidpoints)
- {
- Debug.Console(0, destination, "Trying to find route on {0}", inputTieToTry.SourcePort.ParentDevice.Key);
- var upstreamDeviceOutputPort = inputTieToTry.SourcePort;
- var upstreamRoutingDevice = upstreamDeviceOutputPort.ParentDevice as IRoutingInputsOutputs;
- // Check if this previous device has already been walked
- if (!(alreadyCheckedDevices != null && alreadyCheckedDevices.Contains(upstreamRoutingDevice)))
- {
- // haven't seen this device yet. Do it. Pass the output port to the next
- // level to enable switching on success
- var upstreamRoutingSuccess = upstreamRoutingDevice.GetRouteToSource(source, upstreamDeviceOutputPort,
- alreadyCheckedDevices, signalType, cycle, routeTable);
- if (upstreamRoutingSuccess)
- {
- Debug.Console(0, destination, "Upstream device route found");
- inputPort = inputTieToTry.DestinationPort;
- break; // Stop looping the inputs in this cycle
- }
- }
- }
- }
-
- // we have a route on corresponding inputPort. *** Do the route ***
- if (inputPort != null)
- {
- Debug.Console(0, destination, "adding route:");
- if (onSuccessOutputPort == null)
- {
- // it's a sink device
- routeTable.Routes.Add(new RouteSwitchDescriptor(inputPort));
- }
- else if (destination is IRouting)
- {
- routeTable.Routes.Add(new RouteSwitchDescriptor (onSuccessOutputPort, inputPort));
- }
- else // device is merely IRoutingInputOutputs
- Debug.Console(0, destination, " No routing. Passthrough device");
- Debug.Console(0, destination, "Exiting cycle {0}", cycle);
- return true;
- }
-
- if(alreadyCheckedDevices == null)
- alreadyCheckedDevices = new List();
- alreadyCheckedDevices.Add(destination as IRoutingInputsOutputs);
-
- Debug.Console(0, destination, "No route found to {0}", source.Key);
- return false;
- }
- }
-
-
-
-
-
- // MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE
-
-
- ///
- /// A collection of routes - typically the global DefaultCollection is used
- ///
- public class RouteDescriptorCollection
- {
- public static RouteDescriptorCollection DefaultCollection
- {
- get
- {
- if (_DefaultCollection == null)
- _DefaultCollection = new RouteDescriptorCollection();
- return _DefaultCollection;
- }
- }
- static RouteDescriptorCollection _DefaultCollection;
-
- List RouteDescriptors = new List();
-
- public void AddRouteDescriptor(RouteDescriptor descriptor)
- {
- if (RouteDescriptors.Any(t => t.Destination == descriptor.Destination))
- {
- Debug.Console(1, descriptor.Destination,
- "Route to [{0}] already exists in global routes table", descriptor.Source.Key);
- return;
- }
- RouteDescriptors.Add(descriptor);
- }
-
- public RouteDescriptor GetRouteDescriptorForDestination(IRoutingInputs destination)
- {
- return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination);
- }
-
- ///
- /// Returns the RouteDescriptor for a given destination and removes it from collection.
- /// Returns null if no route with the provided destination exists.
- ///
- public RouteDescriptor RemoveRouteDescriptor(IRoutingInputs destination)
- {
- var descr = GetRouteDescriptorForDestination(destination);
- if (descr != null)
- RouteDescriptors.Remove(descr);
- return descr;
- }
- }
-
- ///
- /// Represents an collection of individual route steps between Source and Destination
- ///
- public class RouteDescriptor
- {
- public IRoutingInputs Destination { get; private set; }
- public IRoutingOutputs Source { get; private set; }
- public eRoutingSignalType SignalType { get; private set; }
- public List Routes { get; private set; }
-
-
- public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, eRoutingSignalType signalType)
- {
- Destination = destination;
- Source = source;
- SignalType = signalType;
- Routes = new List();
- }
-
- public void ExecuteRoutes()
- {
- foreach (var route in Routes)
- {
- Debug.Console(2, route.ToString());
- if (route.SwitchingDevice is IRoutingSinkWithSwitching)
- (route.SwitchingDevice as IRoutingSinkWithSwitching).ExecuteSwitch(route.InputPort.Selector);
- else if (route.SwitchingDevice is IRouting)
- {
- (route.SwitchingDevice as IRouting).ExecuteSwitch(route.InputPort.Selector, route.OutputPort.Selector, SignalType);
- route.OutputPort.InUseTracker.AddUser(Destination, "destination");
- }
- }
- }
-
- public void ReleaseRoutes()
- {
- foreach (var route in Routes)
- {
- if (route.SwitchingDevice is IRouting)
- {
- // Pull the route from the port. Whatever is watching the output's in use tracker is
- // responsible for responding appropriately.
- route.OutputPort.InUseTracker.RemoveUser(Destination, "destination");
- }
- }
- }
-
- public override string ToString()
- {
- var routesText = Routes.Select(r => r.ToString()).ToArray();
- return string.Format("Route table from {0} to {1}:\r{2}", Source.Key, Destination.Key, string.Join("\r", routesText));
- }
- }
-
- ///
- /// Represents an individual link for a route
- ///
- public class RouteSwitchDescriptor
- {
- public IRoutingInputs SwitchingDevice { get { return InputPort.ParentDevice; } }
- public RoutingOutputPort OutputPort { get; set; }
- public RoutingInputPort InputPort { get; set; }
-
- public RouteSwitchDescriptor(RoutingInputPort inputPort)
- {
- InputPort = inputPort;
- }
-
- public RouteSwitchDescriptor(RoutingOutputPort outputPort, RoutingInputPort inputPort)
- {
- InputPort = inputPort;
- OutputPort = outputPort;
- }
-
- public override string ToString()
- {
- if(OutputPort == null) // IRoutingSink
- return string.Format("{0} switches to input '{1}'", SwitchingDevice.Key, InputPort.Selector);
-
- return string.Format("{0} switches output '{1}' to input '{2}'", SwitchingDevice.Key, OutputPort.Selector, InputPort.Selector);
- }
- }
-}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingInterfaces.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingInterfaces.cs
deleted file mode 100644
index 352a35dc..00000000
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingInterfaces.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-using Crestron.SimplSharpPro;
-using Crestron.SimplSharpPro.DM;
-
-using PepperDash.Core;
-
-
-namespace PepperDash.Essentials.Core
-{
- //*******************************************************************************************
- // Interfaces
-
- public interface IRoutingInputs : IKeyed
- {
- RoutingPortCollection InputPorts { get; }
- }
-
- public interface IRoutingOutputs : IKeyed
- {
- RoutingPortCollection OutputPorts { get; }
- }
-
- ///
- /// For fixed-source endpoint devices
- ///
- public interface IRoutingSinkNoSwitching : IRoutingInputs
- {
-
- }
-
- public interface IRoutingSinkWithSwitching : IRoutingSinkNoSwitching
- {
- //void ClearRoute();
- void ExecuteSwitch(object inputSelector);
- }
-
- ///
- /// For devices like RMCs, baluns, other devices with no switching.
- ///
- public interface IRoutingInputsOutputs : IRoutingInputs, IRoutingOutputs
- {
- }
-
- public interface IRouting : IRoutingInputsOutputs
- {
- //void ClearRoute(object outputSelector);
- void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType);
- }
-
- public interface IRoutingSource : IRoutingOutputs
- {
- }
-}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPort.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPort.cs
deleted file mode 100644
index e2a026ab..00000000
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPort.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-using PepperDash.Core;
-
-
-namespace PepperDash.Essentials.Core
-{
- ///
- /// Base class for RoutingInput and Output ports
- ///
- public abstract class RoutingPort : IKeyed
- {
- public string Key { get; private set; }
- public eRoutingSignalType Type { get; private set; }
- public eRoutingPortConnectionType ConnectionType { get; private set; }
- public readonly object Selector;
- public bool IsInternal { get; private set; }
-
- public RoutingPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, object selector, bool isInternal)
- {
- Key = key;
- Type = type;
- ConnectionType = connType;
- Selector = selector;
- IsInternal = IsInternal;
- }
- }
-
- public enum eRoutingSignalType
- {
- Audio,
- Video,
- AudioVideo
- }
-
- public enum eRoutingPortConnectionType
- {
- None, BackplaneOnly, Hdmi, Rgb, Vga, LineAudio, DigitalAudio, Sdi, Composite, Component, DmCat, DmMmFiber, DmSmFiber
- }
-
- ///
- /// Basic RoutingInput with no statuses.
- ///
- public class RoutingInputPort : RoutingPort
- {
- ///
- /// The IRoutingInputs object this lives on
- ///
- public IRoutingInputs ParentDevice { get; private set; }
-
- ///
- /// Constructor for a basic RoutingInputPort
- ///
- /// An object used to refer to this port in the IRouting device's ExecuteSwitch method.
- /// May be string, number, whatever
- /// The IRoutingInputs object this lives on
- public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
- object selector, IRoutingInputs parent)
- : this (key, type, connType, selector, parent, false)
- {
- }
-
- ///
- /// Constructor for a virtual routing input port that lives inside a device. For example
- /// the ports that link a DM card to a DM matrix bus
- ///
- /// true for internal ports
- public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
- object selector, IRoutingInputs parent, bool isInternal)
- : base(key, type, connType, selector, isInternal)
- {
- if (parent == null)
- throw new ArgumentNullException("parent");
- ParentDevice = parent;
- }
-
- }
-
- ///
- /// A RoutingInputPort for devices like DM-TX and DM input cards.
- /// Will provide video statistics on connected signals
- ///
- public class RoutingInputPortWithVideoStatuses : RoutingInputPort
- {
- ///
- /// Video statuses attached to this port
- ///
- public VideoStatusOutputs VideoStatus { get; private set; }
-
- ///
- /// Constructor
- ///
- /// An object used to refer to this port in the IRouting device's ExecuteSwitch method.
- /// May be string, number, whatever
- /// The IRoutingInputs object this lives on
- /// A VideoStatusFuncsWrapper used to assign the callback funcs that will get
- /// the values for the various stats
- public RoutingInputPortWithVideoStatuses(string key,
- eRoutingSignalType type, eRoutingPortConnectionType connType, object selector,
- IRoutingInputs parent, VideoStatusFuncsWrapper funcs) :
- base(key, type, connType, selector, parent)
- {
- VideoStatus = new VideoStatusOutputs(funcs);
- }
- }
-
- public class RoutingOutputPort : RoutingPort
- {
- ///
- /// The IRoutingOutputs object this port lives on
- ///
- public IRoutingOutputs ParentDevice { get; private set; }
-
- public InUseTracking InUseTracker { get; private set; }
-
-
- ///
- ///
- /// An object used to refer to this port in the IRouting device's ExecuteSwitch method.
- /// May be string, number, whatever
- /// The IRoutingOutputs object this port lives on
- public RoutingOutputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
- object selector, IRoutingOutputs parent)
- : this(key, type, connType, selector, parent, false)
- {
- }
-
- public RoutingOutputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
- object selector, IRoutingOutputs parent, bool isInternal)
- : base(key, type, connType, selector, isInternal)
- {
- if (parent == null)
- throw new ArgumentNullException("parent");
- ParentDevice = parent;
- InUseTracker = new InUseTracking();
- }
-
- public override string ToString()
- {
- return ParentDevice.Key + ":" + Key;
- }
- }
-}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPortCollection.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPortCollection.cs
deleted file mode 100644
index ba972ab7..00000000
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPortCollection.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-using PepperDash.Core;
-
-
-namespace PepperDash.Essentials.Core
-{
- ///
- /// Basically a List , with an indexer to find ports by key name
- ///
- public class RoutingPortCollection : List where T: RoutingPort
- {
- ///
- /// Case-insensitive port lookup linked to ports' keys
- ///
- public T this[string key]
- {
- get
- {
- return this.FirstOrDefault(i => i.Key.Equals(key, StringComparison.OrdinalIgnoreCase));
- }
- }
- }
-}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/TieLine.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/TieLine.cs
deleted file mode 100644
index 6a89d2de..00000000
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/TieLine.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-using Crestron.SimplSharpPro;
-using Crestron.SimplSharpPro.DM;
-
-using PepperDash.Core;
-
-namespace PepperDash.Essentials.Core
-{
- public class TieLine
- {
- public RoutingOutputPort SourcePort { get; private set; }
- public RoutingInputPort DestinationPort { get; private set; }
- public int InUseCount { get { return DestinationUsingThis.Count; } }
-
- ///
- /// Gets the type of this tie line. Will either be the type of the desination port
- /// or the type of OverrideType when it is set.
- ///
- public eRoutingSignalType Type
- {
- get
- {
- if (OverrideType.HasValue) return OverrideType.Value;
- return DestinationPort.Type;
- }
- }
-
- ///
- /// Use this to override the Type property for the destination port. For example,
- /// when the tie line is type AudioVideo, and the signal flow should be limited to
- /// Audio-only or Video only, changing this type will alter the signal paths
- /// available to the routing algorithm without affecting the actual Type
- /// of the destination port.
- ///
- public eRoutingSignalType? OverrideType { get; set; }
-
- List DestinationUsingThis = new List();
-
- ///
- /// For tie lines that represent internal links, like from cards to the matrix in a DM.
- /// This property is true if SourcePort and DestinationPort IsInternal
- /// property are both true
- ///
- public bool IsInternal { get { return SourcePort.IsInternal && DestinationPort.IsInternal; } }
- public bool TypeMismatch { get { return SourcePort.Type != DestinationPort.Type; } }
- public bool ConnectionTypeMismatch { get { return SourcePort.ConnectionType != DestinationPort.ConnectionType; } }
- public string TypeMismatchNote { get; set; }
-
- ///
- ///
- ///
- ///
- ///
- public TieLine(RoutingOutputPort sourcePort, RoutingInputPort destinationPort)
- {
- if (sourcePort == null || destinationPort == null)
- throw new ArgumentNullException("source or destination port");
- SourcePort = sourcePort;
- DestinationPort = destinationPort;
- }
-
- ///
- /// Creates a tie line with an overriding Type. See help for OverrideType property for info
- ///
- /// The signal type to limit the link to. Overrides DestinationPort.Type
- public TieLine(RoutingOutputPort sourcePort, RoutingInputPort destinationPort, eRoutingSignalType overrideType) :
- this(sourcePort, destinationPort)
- {
- OverrideType = overrideType;
- }
-
- public static TieLine TieLineFromStrings(string sourceKey, string sourcePortKey, string destinationKey, string destinationPortKey)
- {
- var sourceDev = DeviceManager.GetDeviceForKey(sourceKey) as IRoutingOutputs;
- if (sourceDev == null)
- {
- Debug.Console(1, "WARNING: Cannot create tie line, routable source '{0}' not found", sourceKey);
- return null;
- }
- var destDev = DeviceManager.GetDeviceForKey(destinationKey) as IRoutingInputs;
- if (destDev == null)
- {
- Debug.Console(1, "WARNING: Cannot create tie line, routable destination '{0}' not found", destinationKey);
- return null;
- }
- var sourcePort = sourceDev.OutputPorts[sourcePortKey];
- if (sourcePort == null)
- {
- Debug.Console(1, "WARNING: Cannot create tie line. Source '{0}' does not contain port '{1}'", sourceKey, sourcePortKey);
- return null;
- }
- var destPort = destDev.InputPorts[destinationPortKey];
- if (destPort == null)
- {
- Debug.Console(1, "WARNING: Cannot create tie line. Destination '{0}' does not contain port '{1}'", destinationKey, destinationPortKey);
- return null;
- }
-
- return new TieLine(sourcePort, destPort);
- }
-
- ///
- /// Will link up video status from supporting inputs to connected outputs
- ///
- public void Activate()
- {
- // Now does nothing
- }
-
- public void Deactivate()
- {
- // Now does nothing
- }
-
- public override string ToString()
- {
- return string.Format("Tie line: [{0}]{1} --> [{2}]{3}", SourcePort.ParentDevice.Key, SourcePort.Key,
- DestinationPort.ParentDevice.Key, DestinationPort.Key);
- }
- }
-
-
- //********************************************************************************
-
- public class TieLineCollection : List
- {
- public static TieLineCollection Default
- {
- get
- {
- if (_Default == null)
- _Default = new TieLineCollection();
- return _Default;
- }
- }
- static TieLineCollection _Default;
- }
-}
\ No newline at end of file