diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/MOVED TO CORE Device.cs b/Essentials Core/PepperDashEssentialsBase/Devices/MOVED TO CORE Device.cs deleted file mode 100644 index 9fde162b..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/MOVED TO CORE Device.cs +++ /dev/null @@ -1,92 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; - -//namespace PepperDash.Essentials.Core -//{ -// //********************************************************************************************************* -// /// -// /// The core event and status-bearing class that most if not all device and connectors can derive from. -// /// -// public class Device : IKeyed -// { -// public string Key { get; protected set; } -// public string Name { get; protected set; } -// public bool Enabled { get; protected set; } -// List _PreActivationActions; -// List _PostActivationActions; - -// public static Device DefaultDevice { get { return _DefaultDevice; } } -// static Device _DefaultDevice = new Device("Default", "Default"); - -// /// -// /// Base constructor for all Devices. -// /// -// /// -// public Device(string key) -// { -// Key = key; -// if (key.Contains('.')) Debug.Console(0, this, "WARNING: Device name's should not include '.'"); -// Name = ""; -// } - -// public Device(string key, string name) : this(key) -// { -// Name = name; -// } - -// public void AddPreActivationAction(Action act) -// { -// if (_PreActivationActions == null) -// _PreActivationActions = new List(); -// _PreActivationActions.Add(act); -// } - -// public void AddPostActivationAction(Action act) -// { -// if (_PostActivationActions == null) -// _PostActivationActions = new List(); -// _PostActivationActions.Add(act); -// } - -// /// -// /// Gets this device ready to be used in the system. Runs any added pre-activation items, and -// /// all post-activation at end. Classes needing additional logic to -// /// run should override CustomActivate() -// /// -// public bool Activate() -// { -// if (_PreActivationActions != null) -// _PreActivationActions.ForEach(a => a.Invoke()); -// var result = CustomActivate(); -// if(result && _PostActivationActions != null) -// _PostActivationActions.ForEach(a => a.Invoke()); -// return result; -// } - -// /// -// /// Called in between Pre and PostActivationActions when Activate() is called. -// /// Override to provide addtitional setup when calling activation. Overriding classes -// /// do not need to call base.CustomActivate() -// /// -// /// true if device activated successfully. -// public virtual bool CustomActivate() { return true; } - -// /// -// /// Call to deactivate device - unlink events, etc. Overriding classes do not -// /// need to call base.Deactivate() -// /// -// /// -// public virtual bool Deactivate() { return true; } - -// /// -// /// Helper method to check object for bool value false and fire an Action method -// /// -// /// Should be of type bool, others will be ignored -// /// Action to be run when o is false -// public void OnFalse(object o, Action a) -// { -// if (o is bool && !(bool)o) a(); -// } -// } -//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DefaultDevice.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DefaultDevice.cs deleted file mode 100644 index a5954437..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DefaultDevice.cs +++ /dev/null @@ -1,44 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using Crestron.SimplSharp; -//using Crestron.SimplSharpPro; -//using Crestron.SimplSharpPro.DeviceSupport; -//using Crestron.SimplSharpPro.EthernetCommunication; -//using Crestron.SimplSharpPro.UI; - -//using PepperDash.Core; - - -//namespace PepperDash.Essentials.Core -//{ - -//[Obsolete] -// public class PresentationDevice : Device, IPresentationSource -// { -// public PresentationSourceType Type { get; protected set; } -// public string IconName { get { return "Blank"; } set { } } -// public BoolFeedback HasPowerOnFeedback { get; protected set; } - -// PresentationDevice() -// : base("Default", "Default") -// { -// HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, () => false); -// Type = PresentationSourceType.None; -// } - -// /// -// /// Returns a "default" presentation device, with no abilities. -// /// -// public static IPresentationSource Default -// { -// get -// { -// if (_Default == null) -// _Default = new PresentationDevice(); -// return _Default; -// } -// } -// static IPresentationSource _Default; -// } -//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DeviceConfig.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DeviceConfig.cs deleted file mode 100644 index 280cb858..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DeviceConfig.cs +++ /dev/null @@ -1,52 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using Crestron.SimplSharp; -//using Crestron.SimplSharpPro; - -//using Newtonsoft.Json; -//using Newtonsoft.Json.Linq; - -//namespace PepperDash.Essentials.Core -//{ - -// public class DeviceConfig -// { -// public string Key { get; set; } -// public string Name { get; set; } -// public string Type { get; set; } -// [JsonConverter(typeof(DevicePropertiesJsonConverter))] -// public JToken Properties { get; set; } - - -// } - -// /// -// /// The gist of this converter: The comspec JSON comes in with normal values that need to be converted -// /// into enum names. This converter takes the value and applies the appropriate enum's name prefix to the value -// /// and then returns the enum value using Enum.Parse -// /// -// public class DevicePropertiesJsonConverter : JsonConverter -// { -// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) -// { -// return JObject.Load(reader); -// } - -// /// -// /// This will be hit with every value in the ComPortConfig class. We only need to -// /// do custom conversion on the comspec items. -// /// -// public override bool CanConvert(Type objectType) -// { -// return true; -// } - -// public override bool CanRead { get { return true; } } -// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) -// { -// throw new NotImplementedException(); -// } -// } -//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE DvdDeviceBase.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE DvdDeviceBase.cs deleted file mode 100644 index a45f297c..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE DvdDeviceBase.cs +++ /dev/null @@ -1,50 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using Crestron.SimplSharp; -//using Crestron.SimplSharpPro; -//using Crestron.SimplSharpPro.DeviceSupport; - -//using PepperDash.Core; - - -//namespace PepperDash.Essentials.Core -//{ -// public abstract class DvdDeviceBase : Device, IPresentationSource, IHasCueActionList -// { -// public DvdDeviceBase(string key, string name) -// : base(key, name) -// { -// HasPowerOnFeedback = new BoolFeedback(() => false); - -// } - -// #region IPresentationSource Members - -// PresentationSourceType IPresentationSource.Type -// { -// get { return PresentationSourceType.Dvd; } -// } - -// public string IconName -// { -// get -// { -// return "DVD"; -// } -// set { } -// } - -// public virtual BoolFeedback HasPowerOnFeedback { get; private set; } - -// #endregion - -// #region IFunctionList Members - -// public abstract List CueActionList { get; } - -// #endregion - -// } -//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrDvdBase.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrDvdBase.cs deleted file mode 100644 index bad059f9..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrDvdBase.cs +++ /dev/null @@ -1,130 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using Crestron.SimplSharpPro; - -//using PepperDash.Essentials.Core; - -//using PepperDash.Core; - - -//namespace PepperDash.Essentials.Core -//{ -// /// -// /// This DVD class should cover most IR, one-way DVD and Bluray fuctions -// /// -// public class IrDvdBase : Device, IHasCueActionList, -// IPresentationSource, IAttachVideoStatus, IHasFeedback, IRoutingOutputs -// { -// public PresentationSourceType Type { get; protected set; } -// public string IconName { get; set; } - -// public BoolFeedback HasPowerOnFeedback { get; private set; } -// public IrOutputPortController IrPort { get; private set; } - -// public RoutingOutputPort HdmiOut { get; private set; } - -// #region IRoutingOutputs Members - -// /// -// /// Options: hdmi -// /// -// public RoutingPortCollection OutputPorts { get; private set; } - -// #endregion - -// public IrDvdBase(string key, string name, IROutputPort port, IrDriverInfo driverInfo) -// : base(key, name) -// { -// IrPort = new IrOutputPortController("ir-" + key, port, driverInfo.FileName); -// Type = PresentationSourceType.Dvd; -// IconName = "Bluray"; -// HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, () => false); - -// HdmiOut = new RoutingOutputPort("HDMI", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 0, this); -// OutputPorts = new RoutingPortCollection() -// { -// HdmiOut -// }; -// CueActionList = IrPort.GetUOsForIrCommands(driverInfo.IrMap); -// } - -// public IrDvdBase(string key, string name, IROutputPort port, string irDriverFilepath) -// : base(key, name) -// { -// IrPort = new IrOutputPortController("ir-" + key, port, irDriverFilepath); -// Type = PresentationSourceType.Dvd; -// IconName = "Bluray"; -// HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, () => false); - -// HdmiOut = new RoutingOutputPort("HDMI", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 0, this); -// OutputPorts = new RoutingPortCollection() -// { -// HdmiOut -// }; -// var numToIr = new Dictionary -// { -// { CommonBoolCue.Power, IROutputStandardCommands.IROut_POWER }, -// { CommonBoolCue.PowerOff, IROutputStandardCommands.IROut_POWER_OFF }, -// { CommonBoolCue.PowerOn, IROutputStandardCommands.IROut_POWER_ON }, -// { CommonBoolCue.Replay, IROutputStandardCommands.IROut_REPLAY }, -// { CommonBoolCue.Play, IROutputStandardCommands.IROut_PLAY }, -// { CommonBoolCue.Pause, IROutputStandardCommands.IROut_PAUSE }, -// { CommonBoolCue.Stop, IROutputStandardCommands.IROut_STOP }, -// { CommonBoolCue.ChapPrevious, IROutputStandardCommands.IROut_TRACK_MINUS }, -// { CommonBoolCue.ChapNext, IROutputStandardCommands.IROut_TRACK_PLUS }, -// { CommonBoolCue.Rewind, IROutputStandardCommands.IROut_RSCAN }, -// { CommonBoolCue.Ffwd, IROutputStandardCommands.IROut_FSCAN }, -// { CommonBoolCue.RStep, IROutputStandardCommands.IROut_R_STEP }, -// { CommonBoolCue.FStep, IROutputStandardCommands.IROut_F_STEP }, -// { CommonBoolCue.Exit, IROutputStandardCommands.IROut_EXIT }, -// { CommonBoolCue.Home, IROutputStandardCommands.IROut_HOME }, -// { CommonBoolCue.Menu, IROutputStandardCommands.IROut_MENU }, -// { CommonBoolCue.PopUp, IROutputStandardCommands.IROut_POPUPMENU }, -// { CommonBoolCue.Up, IROutputStandardCommands.IROut_UP_ARROW }, -// { CommonBoolCue.Down, IROutputStandardCommands.IROut_DN_ARROW }, -// { CommonBoolCue.Left, IROutputStandardCommands.IROut_LEFT_ARROW }, -// { CommonBoolCue.Right, IROutputStandardCommands.IROut_RIGHT_ARROW }, -// { CommonBoolCue.Select, IROutputStandardCommands.IROut_ENTER }, -// { CommonBoolCue.Info, IROutputStandardCommands.IROut_INFO }, -// { CommonBoolCue.Red, IROutputStandardCommands.IROut_RED }, -// { CommonBoolCue.Green, IROutputStandardCommands.IROut_GREEN }, -// { CommonBoolCue.Yellow, IROutputStandardCommands.IROut_YELLOW }, -// { CommonBoolCue.Blue, IROutputStandardCommands.IROut_BLUE }, -// { CommonBoolCue.Digit0, IROutputStandardCommands.IROut_0 }, -// { CommonBoolCue.Digit1, IROutputStandardCommands.IROut_1 }, -// { CommonBoolCue.Digit2, IROutputStandardCommands.IROut_2 }, -// { CommonBoolCue.Digit3, IROutputStandardCommands.IROut_3 }, -// { CommonBoolCue.Digit4, IROutputStandardCommands.IROut_4 }, -// { CommonBoolCue.Digit5, IROutputStandardCommands.IROut_5 }, -// { CommonBoolCue.Digit6, IROutputStandardCommands.IROut_6 }, -// { CommonBoolCue.Digit7, IROutputStandardCommands.IROut_7 }, -// { CommonBoolCue.Digit8, IROutputStandardCommands.IROut_8 }, -// { CommonBoolCue.Digit9, IROutputStandardCommands.IROut_9 }, -// { CommonBoolCue.Audio, "AUDIO" }, -// { CommonBoolCue.Subtitle, "SUBTITLE" }, -// { CommonBoolCue.Setup, "SETUP" }, -// }; -// CueActionList = IrPort.GetUOsForIrCommands(numToIr); -// } - - -// public List Feedbacks -// { -// get { return this.GetVideoStatuses().ToList(); } -// } - - -// #region IFunctionList Members - -// public List CueActionList { get; set; } - -// #endregion -// } - -// public class IrDriverInfo -// { -// public Dictionary IrMap { get; set; } -// public string FileName { get; set; } -// } -//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrSetTopBoxBase.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrSetTopBoxBase.cs deleted file mode 100644 index a607036f..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrSetTopBoxBase.cs +++ /dev/null @@ -1,143 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using Crestron.SimplSharpPro; - -//using PepperDash.Essentials.Core; -//using PepperDash.Essentials.Core.Presets; - -//using PepperDash.Core; - - -//namespace PepperDash.Essentials.Core -//{ -// /// -// /// This DVD class should cover most IR, one-way DVD and Bluray fuctions -// /// -// public class IrSetTopBoxBase : Device, IHasCueActionList, -// IPresentationSource, IAttachVideoStatus, IHasFeedback, IRoutingOutputs, IHasSetTopBoxProperties -// { -// public PresentationSourceType Type { get; protected set; } -// public string IconName { get; set; } - -// public BoolFeedback HasPowerOnFeedback { get; private set; } -// public IrOutputPortController IrPort { get; private set; } - -// public DevicePresetsModel PresetsModel { get; private set; } - -// #region IRoutingOutputs Members - -// /// -// /// Options: hdmi -// /// -// public RoutingPortCollection OutputPorts { get; private set; } - -// #endregion - -// public IrSetTopBoxBase(string key, string name, IROutputPort port, string irDriverFilepath) -// : base(key, name) -// { -// IrPort = new IrOutputPortController("ir-" + key, port, irDriverFilepath); -// Type = PresentationSourceType.SetTopBox; -// IconName = "TV"; -// HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, () => false); -// OutputPorts = new RoutingPortCollection() -// { -// new RoutingOutputPort("HDMI", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 0, this) -// }; -// } - -// public void LoadPresets(string filePath) -// { -// //PresetsModel = new DevicePresetsModel(Key + "-presets", this, filePath); -// //DeviceManager.AddDevice(PresetsModel); -// } - -// #region IDeviceWithOutputs Members - -// public List Feedbacks -// { -// get { return this.GetVideoStatuses().ToList(); } -// } - -// #endregion - -// #region IFunctionList Members - -// public List CueActionList -// { -// get -// { -// // This might be the best way to get the words back into functions -// new BoolCueActionPair(CommonBoolCue.Power, b => IrPort.PressRelease(IROutputStandardCommands.IROut_POWER, b)); -// new BoolCueActionPair(CommonBoolCue.PowerOn, b => IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_ON, b)); -// new BoolCueActionPair(CommonBoolCue.PowerOff, b => IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_OFF, b)); -// new BoolCueActionPair(CommonBoolCue.ChannelUp, b => IrPort.PressRelease(IROutputStandardCommands.IROut_CH_PLUS, b)); - -// var numToIr = new Dictionary -// { -// { CommonBoolCue.Power, IROutputStandardCommands.IROut_POWER }, -// { CommonBoolCue.PowerOn, IROutputStandardCommands.IROut_POWER_ON }, -// { CommonBoolCue.PowerOff, IROutputStandardCommands.IROut_POWER_OFF }, -// { CommonBoolCue.ChannelUp, IROutputStandardCommands.IROut_CH_PLUS }, -// { CommonBoolCue.ChannelDown, IROutputStandardCommands.IROut_CH_MINUS }, -// { CommonBoolCue.Last, IROutputStandardCommands.IROut_LAST }, -// { CommonBoolCue.Play, IROutputStandardCommands.IROut_PLAY }, -// { CommonBoolCue.Pause, IROutputStandardCommands.IROut_PAUSE }, -// { CommonBoolCue.Stop, IROutputStandardCommands.IROut_STOP }, -// { CommonBoolCue.ChapPrevious, IROutputStandardCommands.IROut_TRACK_MINUS }, -// { CommonBoolCue.ChapNext, IROutputStandardCommands.IROut_TRACK_PLUS }, -// { CommonBoolCue.Rewind, IROutputStandardCommands.IROut_RSCAN }, -// { CommonBoolCue.Ffwd, IROutputStandardCommands.IROut_FSCAN }, -// { CommonBoolCue.Replay, IROutputStandardCommands.IROut_REPLAY }, -// { CommonBoolCue.Advance, "ADVANCE" }, -// { CommonBoolCue.Record, IROutputStandardCommands.IROut_RECORD }, -// { CommonBoolCue.Exit, IROutputStandardCommands.IROut_EXIT }, -// { CommonBoolCue.Menu, IROutputStandardCommands.IROut_MENU }, -// { CommonBoolCue.List, IROutputStandardCommands.IROut_DVR }, -// { CommonBoolCue.Dvr, IROutputStandardCommands.IROut_DVR }, -// { CommonBoolCue.Back, IROutputStandardCommands.IROut_BACK }, -// { CommonBoolCue.Up, IROutputStandardCommands.IROut_UP_ARROW }, -// { CommonBoolCue.Down, IROutputStandardCommands.IROut_DN_ARROW }, -// { CommonBoolCue.Left, IROutputStandardCommands.IROut_LEFT_ARROW }, -// { CommonBoolCue.Right, IROutputStandardCommands.IROut_RIGHT_ARROW }, -// { CommonBoolCue.Select, IROutputStandardCommands.IROut_ENTER }, -// { CommonBoolCue.Guide, IROutputStandardCommands.IROut_GUIDE }, -// { CommonBoolCue.PageUp, IROutputStandardCommands.IROut_PAGE_UP }, -// { CommonBoolCue.PageDown, IROutputStandardCommands.IROut_PAGE_DOWN }, -// { CommonBoolCue.Info, IROutputStandardCommands.IROut_INFO }, -// { CommonBoolCue.Red, IROutputStandardCommands.IROut_RED }, -// { CommonBoolCue.Green, IROutputStandardCommands.IROut_GREEN }, -// { CommonBoolCue.Yellow, IROutputStandardCommands.IROut_YELLOW }, -// { CommonBoolCue.Blue, IROutputStandardCommands.IROut_BLUE }, -// { CommonBoolCue.Digit0, IROutputStandardCommands.IROut_0 }, -// { CommonBoolCue.Digit1, IROutputStandardCommands.IROut_1 }, -// { CommonBoolCue.Digit2, IROutputStandardCommands.IROut_2 }, -// { CommonBoolCue.Digit3, IROutputStandardCommands.IROut_3 }, -// { CommonBoolCue.Digit4, IROutputStandardCommands.IROut_4 }, -// { CommonBoolCue.Digit5, IROutputStandardCommands.IROut_5 }, -// { CommonBoolCue.Digit6, IROutputStandardCommands.IROut_6 }, -// { CommonBoolCue.Digit7, IROutputStandardCommands.IROut_7 }, -// { CommonBoolCue.Digit8, IROutputStandardCommands.IROut_8 }, -// { CommonBoolCue.Digit9, IROutputStandardCommands.IROut_9 }, -// { CommonBoolCue.Dash, "DASH" }, -// }; -// return IrPort.GetUOsForIrCommands(numToIr); -// } -// } - -// #endregion - -// #region IHasSetTopBoxProperties Members - -// public bool HasDpad { get; set; } - -// public bool HasPreset { get; set; } - -// public bool HasDvr { get; set; } - -// public bool HasNumbers { get; set; } - -// #endregion -// } -//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj index bfaa8114..6432d796 100644 --- a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj +++ b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj @@ -120,7 +120,6 @@ - @@ -143,6 +142,7 @@ + @@ -152,10 +152,7 @@ - - - @@ -201,8 +198,6 @@ - - diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/DummyRoutingInputsDevice.cs b/Essentials Core/PepperDashEssentialsBase/Routing/DummyRoutingInputsDevice.cs new file mode 100644 index 00000000..9a92c2ea --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing/DummyRoutingInputsDevice.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Core.Routing +{ + public class DummyRoutingInputsDevice : Device, IRoutingSource + { + /// + /// A single output port, backplane, audioVideo + /// + public RoutingOutputPort AudioVideoOutputPort { get; private set; } + + /// + /// contains the output port + /// + public RoutingPortCollection OutputPorts + { + get { return new RoutingPortCollection() { AudioVideoOutputPort }; } + } + + /// + /// constructor + /// + /// key for special device + public DummyRoutingInputsDevice(string key) : base(key) + { + AudioVideoOutputPort = new RoutingOutputPort("internal", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.BackplaneOnly, + null, this, true); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs index 4f8933bd..d92a0202 100644 --- a/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs +++ b/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs @@ -30,7 +30,7 @@ namespace PepperDash.Essentials.Core var newRoute = destination.GetRouteToSource(source, signalType); if (newRoute == null) return; RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(newRoute); - //Debug.Console(1, destination, "Executing new route"); + Debug.Console(2, destination, "Executing full route"); newRoute.ExecuteRoutes(); } @@ -102,16 +102,16 @@ namespace PepperDash.Essentials.Core eRoutingSignalType signalType, int cycle, RouteDescriptor routeTable) { cycle++; + Debug.Console(2, "GetRouteToSource: {0} {1}--> {2}", cycle, source.Key, destination.Key); + + RoutingInputPort goodInputPort = null; 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) // why???? - //&& - t.DestinationPort.ParentDevice == destination + t => t.DestinationPort.ParentDevice == destination && t.SourcePort.ParentDevice == source); - RoutingInputPort goodInputPort = null; if (directTie != null) // Found a tie directly to the source { goodInputPort = directTie.DestinationPort; @@ -264,14 +264,14 @@ namespace PepperDash.Essentials.Core { foreach (var route in Routes) { - Debug.Console(2, route.ToString()); + 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, "Port {0} routing. Count={1}", route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue); + Debug.Console(2, "Output port {0} routing. Count={1}", route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue); } } } @@ -323,10 +323,11 @@ namespace PepperDash.Essentials.Core public override string ToString() { - if(OutputPort == null) // IRoutingSink + if(SwitchingDevice is IRouting) + return string.Format("{0} switches output '{1}' to input '{2}'", SwitchingDevice.Key, OutputPort.Selector, InputPort.Selector); + else 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 Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs index ea02a3e4..b175341f 100644 --- a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs +++ b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs @@ -40,6 +40,9 @@ namespace PepperDash.Essentials.Core } + /// + /// Endpoint device like a display, that selects inputs + /// public interface IRoutingSinkWithSwitching : IRoutingSinkNoSwitching { //void ClearRoute(); @@ -53,12 +56,21 @@ namespace PepperDash.Essentials.Core { } + /// + /// 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 ClearRoute(object outputSelector); void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType); } + /// + /// Defines an IRoutingOutputs devices as being a source - the start of the chain + /// public interface IRoutingSource : IRoutingOutputs { } diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs index 47b8dcbe..812e0d39 100644 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs +++ b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs @@ -22,7 +22,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco enum eCommandType { SessionStart, SessionEnd, Command, GetStatus, GetConfiguration }; public class CiscoSparkCodec : VideoCodecBase, IHasCallHistory, IHasCallFavorites, IHasDirectory, - IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfview, ICommunicationMonitor + IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfview, + ICommunicationMonitor, IRouting { public event EventHandler DirectoryResultReturned; @@ -46,6 +47,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco public StringFeedback LocalLayoutFeedback { get; private set; } + /// + /// An internal pseudo-source that is routable and connected to the osd input + /// + public DummyRoutingInputsDevice OsdSource { get; private set; } + private CodecCommandWithLabel CurrentSelfviewPipPosition; private CodecCommandWithLabel CurrentLocalLayout; @@ -183,6 +189,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco } } +#warning Figure out where this func is or disappeared to + protected override Func IncomingCallFeedbackFunc { get { return () => false; } } + + private string CliFeedbackRegistrationExpression; private CodecSyncState SyncState; @@ -290,18 +300,37 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco CodecStatus.Status.Video.Selfview.PIPPosition.ValueChangedAction = ComputeSelfviewPipStatus; CodecStatus.Status.Video.Layout.LayoutFamily.Local.ValueChangedAction = ComputeLocalLayout; - CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(StopSharing), this); - HdmiIn1 = new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource1), this); - HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource2), this); + CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(StopSharing), this); + HdmiIn1 = new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource1), this); + HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource2), this); - HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); + HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); InputPorts.Add(CodecOsdIn); InputPorts.Add(HdmiIn1); InputPorts.Add(HdmiIn2); OutputPorts.Add(HdmiOut); + + CreateOsdSource(); } + + /// + /// Creates the fake OSD source, and connects it's AudioVideo output to the CodecOsdIn input + /// to enable routing + /// + void CreateOsdSource() + { + OsdSource = new DummyRoutingInputsDevice(Key + "[osd]"); + DeviceManager.AddDevice(OsdSource); + var tl = new TieLine(OsdSource.AudioVideoOutputPort, CodecOsdIn); + TieLineCollection.Default.Add(tl); + } + /// /// Starts the HTTP feedback server and syncronizes state of codec /// @@ -735,13 +764,25 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco } } - public override void ExecuteSwitch(object selector) + /// + /// + /// + /// + public override void ExecuteSwitch(object selector) + { + (selector as Action)(); + PresentationSourceKey = selector.ToString(); + } + + /// + /// This is necessary for devices that are "routers" in the middle of the path, even though it only has one output and + /// may only have one input. + /// + public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType) { - (selector as Action)(); - PresentationSourceKey = selector.ToString(); + ExecuteSwitch(inputSelector); } - protected override Func IncomingCallFeedbackFunc { get { return () => false; } } /// /// Gets the first CallId or returns null diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs index a72b713d..e21cfbba 100644 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs +++ b/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs @@ -11,7 +11,7 @@ using PepperDash.Essentials.Devices.Common.Codec; namespace PepperDash.Essentials.Devices.Common.VideoCodec { - public abstract class VideoCodecBase : Device, IRoutingInputsOutputs, + public abstract class VideoCodecBase : Device, IRoutingInputsOutputs, IUsageTracking, IHasDialer, IHasSharing, ICodecAudio, iCodecInfo { /// diff --git a/Essentials/PepperDashEssentials/ControlSystem.cs b/Essentials/PepperDashEssentials/ControlSystem.cs index 0e68d23c..8ef6b09f 100644 --- a/Essentials/PepperDashEssentials/ControlSystem.cs +++ b/Essentials/PepperDashEssentials/ControlSystem.cs @@ -162,10 +162,11 @@ namespace PepperDash.Essentials /// public void LoadTieLines() { - // Make this reusable by clearing the TieLineCollection + // In the future, we can't necessarily just clear here because devices + // might be making their own internal sources/tie lines var tlc = TieLineCollection.Default; - tlc.Clear(); + //tlc.Clear(); foreach (var tieLineConfig in ConfigReader.ConfigObject.TieLines) { var newTL = tieLineConfig.GetTieLine(); diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz index c5997a8f..567c1f73 100644 Binary files a/Release Package/PepperDashEssentials.cpz and b/Release Package/PepperDashEssentials.cpz differ diff --git a/Release Package/PepperDashEssentials.dll b/Release Package/PepperDashEssentials.dll index 82545ad0..1a96ce48 100644 Binary files a/Release Package/PepperDashEssentials.dll and b/Release Package/PepperDashEssentials.dll differ