diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs
index 9c71bf2b..e795018a 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs
@@ -22,7 +22,7 @@ namespace PepperDash.Essentials.Core
/// and then attempts a new Route and if sucessful, stores that RouteDescriptor
/// in RouteDescriptorCollection.DefaultCollection
///
- public static void ReleaseAndMakeRoute(this IRoutingSinkNoSwitching destination, IRoutingOutputs source, eRoutingSignalType signalType)
+ public static void ReleaseAndMakeRoute(this IRoutingSink destination, IRoutingOutputs source, eRoutingSignalType signalType)
{
destination.ReleaseRoute();
@@ -39,7 +39,7 @@ namespace PepperDash.Essentials.Core
/// RouteDescriptorCollection.DefaultCollection
///
///
- public static void ReleaseRoute(this IRoutingInputs destination)
+ public static void ReleaseRoute(this IRoutingSink destination)
{
var current = RouteDescriptorCollection.DefaultCollection.RemoveRouteDescriptor(destination);
if (current != null)
@@ -56,7 +56,7 @@ namespace PepperDash.Essentials.Core
/// of an audio/video route are discovered a route descriptor is returned. If no route is
/// discovered, then null is returned
///
- public static RouteDescriptor GetRouteToSource(this IRoutingInputs destination, IRoutingOutputs source, eRoutingSignalType signalType)
+ public static RouteDescriptor GetRouteToSource(this IRoutingSink destination, IRoutingOutputs source, eRoutingSignalType signalType)
{
var routeDescr = new RouteDescriptor(source, destination, signalType);
// if it's a single signal type, find the route
@@ -265,14 +265,20 @@ namespace PepperDash.Essentials.Core
foreach (var route in Routes)
{
Debug.Console(2, "ExecuteRoutes: {0}", 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-" + SignalType);
- Debug.Console(2, "Output port {0} routing. Count={1}", route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue);
- }
+ if (route.SwitchingDevice is IRoutingSink)
+ {
+ var device = route.SwitchingDevice as IRoutingSinkWithSwitching;
+ if (device == null)
+ continue;
+
+ device.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-" + SignalType);
+ Debug.Console(2, "Output port {0} routing. Count={1}", route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue);
+ }
}
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs
index 2c7d5b17..7ea8efd1 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs
@@ -1,86 +1,91 @@
-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
-{
-
- ///
- /// The handler type for a Room's SourceInfoChange
- ///
- public delegate void SourceInfoChangeHandler(/*EssentialsRoomBase room,*/ SourceListItem info, ChangeType type);
-
-
- //*******************************************************************************************
- // Interfaces
-
- ///
- /// For rooms with a single presentation source, change event
- ///
- public interface IHasCurrentSourceInfoChange
- {
- string CurrentSourceInfoKey { get; set; }
- SourceListItem CurrentSourceInfo { get; set; }
- event SourceInfoChangeHandler CurrentSourceChange;
- }
-
- ///
- /// Defines a class that has a collection of RoutingInputPorts
- ///
- public interface IRoutingInputs : IKeyed
- {
- RoutingPortCollection InputPorts { get; }
- }
-
- ///
- /// Defines a class that has a collection of RoutingOutputPorts
- ///
-
- public interface IRoutingOutputs : IKeyed
- {
- RoutingPortCollection OutputPorts { get; }
- }
-
- ///
- /// For fixed-source endpoint devices
- ///
- public interface IRoutingSinkNoSwitching : IRoutingInputs, IHasCurrentSourceInfoChange
- {
-
- }
-
- ///
- /// Endpoint device like a display, that selects inputs
- ///
- public interface IRoutingSinkWithSwitching : IRoutingSinkNoSwitching, IHasCurrentSourceInfoChange
- {
- //void ClearRoute();
- void ExecuteSwitch(object inputSelector);
- }
-
- ///
- /// For devices like RMCs, baluns, other devices with no switching.
- ///
- public interface IRoutingInputsOutputs : IRoutingInputs, IRoutingOutputs
- {
- }
-
- ///
- /// Defines a midpoint device as have internal routing. Any devices in the middle of the
- /// signal chain, that do switching, must implement this for routing to work otherwise
- /// the routing algorithm will treat the IRoutingInputsOutputs device as a passthrough
- /// device.
- ///
- public interface IRouting : IRoutingInputsOutputs
- {
- void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType);
+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
+{
+
+ ///
+ /// The handler type for a Room's SourceInfoChange
+ ///
+ public delegate void SourceInfoChangeHandler(/*EssentialsRoomBase room,*/ SourceListItem info, ChangeType type);
+
+
+ //*******************************************************************************************
+ // Interfaces
+
+ ///
+ /// For rooms with a single presentation source, change event
+ ///
+ public interface IHasCurrentSourceInfoChange
+ {
+ string CurrentSourceInfoKey { get; set; }
+ SourceListItem CurrentSourceInfo { get; set; }
+ event SourceInfoChangeHandler CurrentSourceChange;
+ }
+
+ ///
+ /// Defines a class that has a collection of RoutingInputPorts
+ ///
+ public interface IRoutingInputs : IKeyed
+ {
+ RoutingPortCollection InputPorts { get; }
+ }
+
+ ///
+ /// Defines a class that has a collection of RoutingOutputPorts
+ ///
+
+ public interface IRoutingOutputs : IKeyed
+ {
+ RoutingPortCollection OutputPorts { get; }
+ }
+
+ public interface IRoutingSink : IRoutingInputs, IHasCurrentSourceInfoChange
+ {
+
+ }
+
+ ///
+ /// For fixed-source endpoint devices
+ ///
+ public interface IRoutingSinkNoSwitching : IRoutingSink
+ {
+
+ }
+
+ ///
+ /// Endpoint device like a display, that selects inputs
+ ///
+ 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
+ {
+ }
+
+ ///
+ /// Defines a midpoint device as have internal routing. Any devices in the middle of the
+ /// signal chain, that do switching, must implement this for routing to work otherwise
+ /// the routing algorithm will treat the IRoutingInputsOutputs device as a passthrough
+ /// device.
+ ///
+ public interface IRouting : IRoutingInputsOutputs
+ {
+ void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType);
}
public interface IRoutingNumeric : IRouting
@@ -88,10 +93,10 @@ namespace PepperDash.Essentials.Core
void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type);
}
- public interface ITxRouting : IRoutingNumeric
- {
- IntFeedback VideoSourceNumericFeedback { get; }
- IntFeedback AudioSourceNumericFeedback { get; }
+ public interface ITxRouting : IRoutingNumeric
+ {
+ IntFeedback VideoSourceNumericFeedback { get; }
+ IntFeedback AudioSourceNumericFeedback { get; }
}
///
@@ -100,12 +105,12 @@ namespace PepperDash.Essentials.Core
public interface IRmcRouting : IRoutingNumeric
{
IntFeedback AudioVideoSourceNumericFeedback { get; }
- }
-
- ///
- /// Defines an IRoutingOutputs devices as being a source - the start of the chain
- ///
- public interface IRoutingSource : IRoutingOutputs
- {
- }
+ }
+
+ ///
+ /// Defines an IRoutingOutputs devices as being a source - the start of the chain
+ ///
+ public interface IRoutingSource : IRoutingOutputs
+ {
+ }
}
\ No newline at end of file