diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs index 12edb104..cfd6f09e 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs @@ -29,11 +29,12 @@ namespace PepperDash.Essentials.Core } } + [Flags] public enum eRoutingSignalType { Audio = 1, Video = 2, - AudioVideo = 4, + AudioVideo = Audio | Video, UsbOutput = 8, UsbInput = 16 } diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmHdBaseTEndpointController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmHdBaseTEndpointController.cs index 43ac9fc2..3af4f0fe 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmHdBaseTEndpointController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmHdBaseTEndpointController.cs @@ -1,11 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; +using Crestron.SimplSharp.Ssh; using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.DM; -using Crestron.SimplSharpPro.DM.Endpoints; using Crestron.SimplSharpPro.DM.Endpoints.Receivers; using PepperDash.Essentials.Core; @@ -13,32 +7,25 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.DM { public class HDBaseTRxController : DmHdBaseTControllerBase, IRoutingInputsOutputs, - IComPorts + IComPorts { public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HDBaseTSink { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HDBaseTSink }; } - } + public RoutingPortCollection OutputPorts { get; private set; } public HDBaseTRxController(string key, string name, HDRx3CB rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HDBaseTSink = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, - eRoutingPortConnectionType.Hdmi, null, this); + HDBaseTSink = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this) {Port = Rmc}; - // Set Ports for CEC - HDBaseTSink.Port = Rmc; // Unique case, this class has no HdmiOutput port and ICec is implemented on the receiver class itself + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HDBaseTSink}; } #region IComPorts Members diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc100SController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc100SController.cs index ef70e4f7..876880d1 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc100SController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc100SController.cs @@ -1,12 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; -using Crestron.SimplSharpPro.DM.Endpoints; using Crestron.SimplSharpPro.DM.Endpoints.Receivers; using PepperDash.Essentials.Core; @@ -21,20 +15,14 @@ namespace PepperDash.Essentials.DM public class DmRmc100SController : DmRmcControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { - public DmRmc100S Rmc { get; private set; } + private readonly DmRmc100S _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut }; } - } + public RoutingPortCollection OutputPorts { get; private set; } /// /// Make a Crestron RMC and put it in here @@ -42,20 +30,15 @@ namespace PepperDash.Essentials.DM public DmRmc100SController(string key, string name, DmRmc100S rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, - eRoutingPortConnectionType.Hdmi, null, this); + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this) {Port = _rmc}; - // Set Ports for CEC - HdmiOut.Port = Rmc; // Unique case, this class has no HdmiOutput port and ICec is implemented on the receiver class itself - } - - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; } public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) @@ -64,17 +47,17 @@ namespace PepperDash.Essentials.DM } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc150SController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc150SController.cs index faff23d4..9803b5b8 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc150SController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc150SController.cs @@ -1,12 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; -using Crestron.SimplSharpPro.DM.Endpoints; using Crestron.SimplSharpPro.DM.Endpoints.Receivers; using PepperDash.Essentials.Core; @@ -21,19 +15,20 @@ namespace PepperDash.Essentials.DM public class DmRmc150SController : DmRmcControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { - public DmRmc150S Rmc { get; private set; } + private readonly DmRmc150S _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } public RoutingPortCollection InputPorts { - get { return new RoutingPortCollection { DmIn }; } + get; private set; } public RoutingPortCollection OutputPorts { - get { return new RoutingPortCollection { HdmiOut }; } + get; + private set ; } /// @@ -42,59 +37,43 @@ namespace PepperDash.Essentials.DM public DmRmc150SController(string key, string name, DmRmc150S rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - //VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; - //Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; } - //void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) - //{ - // if (args.EventId == EndpointOutputStreamEventIds.HorizontalResolutionFeedbackEventId || args.EventId == EndpointOutputStreamEventIds.VerticalResolutionFeedbackEventId || - // args.EventId == EndpointOutputStreamEventIds.FramesPerSecondFeedbackEventId) - // { - // VideoOutputResolutionFeedback.FireUpdate(); - // } - //} - void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); - } - } - - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); } public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) @@ -103,17 +82,17 @@ namespace PepperDash.Essentials.DM } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200CController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200CController.cs index 44b1af6c..9beaaf42 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200CController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200CController.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; using Crestron.SimplSharpPro.DM.Endpoints; @@ -21,19 +16,19 @@ namespace PepperDash.Essentials.DM public class DmRmc200CController : DmRmcControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { - public DmRmc200C Rmc { get; private set; } + private readonly DmRmc200C _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } public RoutingPortCollection InputPorts { - get { return new RoutingPortCollection { DmIn }; } + get; private set; } public RoutingPortCollection OutputPorts { - get { return new RoutingPortCollection { HdmiOut }; } + get; private set; } /// @@ -42,24 +37,27 @@ namespace PepperDash.Essentials.DM public DmRmc200CController(string key, string name, DmRmc200C rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); - Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + _rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; } void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) @@ -73,47 +71,40 @@ namespace PepperDash.Essentials.DM void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } } - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); - } - public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { LinkDmRmcToApi(this, trilist, joinStart, joinMapKey, bridge); } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200S2Controller.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200S2Controller.cs index c30b680f..c909098f 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200S2Controller.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200S2Controller.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; using Crestron.SimplSharpPro.DM.Endpoints; @@ -21,20 +16,14 @@ namespace PepperDash.Essentials.DM public class DmRmc200S2Controller : DmRmcControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { - public DmRmc200S2 Rmc { get; private set; } + private readonly DmRmc200S2 _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut }; } - } + public RoutingPortCollection OutputPorts { get; private set; } /// /// Make a Crestron RMC and put it in here @@ -42,24 +31,27 @@ namespace PepperDash.Essentials.DM public DmRmc200S2Controller(string key, string name, DmRmc200S2 rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); - Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + _rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; } void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) @@ -73,28 +65,21 @@ namespace PepperDash.Essentials.DM void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); - } - } - - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); } public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) @@ -103,17 +88,17 @@ namespace PepperDash.Essentials.DM } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200SController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200SController.cs index c48850c8..8d53964b 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200SController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc200SController.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; using Crestron.SimplSharpPro.DM.Endpoints; @@ -21,19 +16,16 @@ namespace PepperDash.Essentials.DM public class DmRmc200SController : DmRmcControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { - public DmRmc200S Rmc { get; private set; } + private readonly DmRmc200S _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } public RoutingPortCollection OutputPorts { - get { return new RoutingPortCollection { HdmiOut }; } + get; private set; } /// @@ -42,24 +34,27 @@ namespace PepperDash.Essentials.DM public DmRmc200SController(string key, string name, DmRmc200S rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); - Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; + + _rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; } void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) @@ -73,47 +68,40 @@ namespace PepperDash.Essentials.DM void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } } - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); - } - public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { LinkDmRmcToApi(this, trilist, joinStart, joinMapKey, bridge); } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs index 6595c6e3..850f7458 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs @@ -1,14 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; using Crestron.SimplSharpPro.DM.Endpoints; using Crestron.SimplSharpPro.DM.Endpoints.Receivers; - +using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Bridges; @@ -21,21 +16,15 @@ namespace PepperDash.Essentials.DM public class DmRmc4kScalerCController : DmRmcControllerBase, IRoutingInputsOutputs, IBasicVolumeWithFeedback, IIROutputPorts, IComPorts, ICec, IRelayPorts { - public DmRmc4kScalerC Rmc { get; private set; } + private readonly DmRmc4kScalerC _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } public RoutingOutputPort BalancedAudioOut { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut, BalancedAudioOut }; } - } + public RoutingPortCollection OutputPorts { get; private set; } /// /// Make a Crestron RMC and put it in here @@ -43,30 +32,35 @@ namespace PepperDash.Essentials.DM public DmRmc4kScalerCController(string key, string name, DmRmc4kScalerC rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); BalancedAudioOut = new RoutingOutputPort(DmPortName.BalancedAudioOut, eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio, null, this); MuteFeedback = new BoolFeedback(() => false); + VolumeLevelFeedback = new IntFeedback("MainVolumeLevelFeedback", () => rmc.AudioOutput.VolumeFeedback.UShortValue); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut, BalancedAudioOut}; - Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); + + _rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; } void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) @@ -80,62 +74,55 @@ namespace PepperDash.Essentials.DM void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } } - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); - } - public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { LinkDmRmcToApi(this, trilist, joinStart, joinMapKey, bridge); } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members /// /// Gets the CEC stream directly from the HDMI port. /// - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion #region IRelayPorts Members public int NumberOfRelayPorts { - get { return Rmc.NumberOfRelayPorts; } + get { return _rmc.NumberOfRelayPorts; } } public CrestronCollection RelayPorts { - get { return Rmc.RelayPorts; } + get { return _rmc.RelayPorts; } } #endregion @@ -153,6 +140,7 @@ namespace PepperDash.Essentials.DM /// public void MuteOff() { + Debug.Console(2, this, "DM Endpoint {0} does not have a mute function", Key); } /// @@ -160,11 +148,12 @@ namespace PepperDash.Essentials.DM /// public void MuteOn() { + Debug.Console(2, this, "DM Endpoint {0} does not have a mute function", Key); } public void SetVolume(ushort level) { - Rmc.AudioOutput.Volume.UShortValue = level; + _rmc.AudioOutput.Volume.UShortValue = level; } public IntFeedback VolumeLevelFeedback @@ -182,22 +171,23 @@ namespace PepperDash.Essentials.DM /// public void MuteToggle() { + Debug.Console(2, this, "DM Endpoint {0} does not have a mute function", Key); } public void VolumeDown(bool pressRelease) { if (pressRelease) - SigHelper.RampTimeScaled(Rmc.AudioOutput.Volume, 0, 4000); + SigHelper.RampTimeScaled(_rmc.AudioOutput.Volume, 0, 4000); else - Rmc.AudioOutput.Volume.StopRamp(); + _rmc.AudioOutput.Volume.StopRamp(); } public void VolumeUp(bool pressRelease) { if (pressRelease) - SigHelper.RampTimeScaled(Rmc.AudioOutput.Volume, 65535, 4000); + SigHelper.RampTimeScaled(_rmc.AudioOutput.Volume, 65535, 4000); else - Rmc.AudioOutput.Volume.StopRamp(); + _rmc.AudioOutput.Volume.StopRamp(); } #endregion diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4k100C1GController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4k100C1GController.cs index 1ed8eb26..b2762c97 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4k100C1GController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4k100C1GController.cs @@ -1,11 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DM; -using Crestron.SimplSharpPro.DM.Endpoints; using Crestron.SimplSharpPro.DM.Endpoints.Receivers; using PepperDash.Essentials.Core; @@ -16,44 +10,39 @@ namespace PepperDash.Essentials.DM public class DmRmc4k100C1GController : DmHdBaseTControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { + private readonly DmRmc4K100C1G _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut }; } - } + public RoutingPortCollection OutputPorts { get; private set; } public DmRmc4k100C1GController(string key, string name, DmRmc4K100C1G rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, - eRoutingPortConnectionType.Hdmi, null, this); + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this) {Port = _rmc}; - // Set Ports for CEC - HdmiOut.Port = Rmc; // Unique case, this class has no HdmiOutput port and ICec is implemented on the receiver class itself + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return (Rmc as DmRmc4K100C1G).IROutputPorts; } } - public int NumberOfIROutputPorts { get { return (Rmc as DmRmc4K100C1G).NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members - public Cec StreamCec { get { return (Rmc as DmRmc4K100C1G).StreamCec; } } + public Cec StreamCec { get { return _rmc.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kScalerCDspController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kScalerCDspController.cs index 8e52822b..e63ad5de 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kScalerCDspController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kScalerCDspController.cs @@ -1,14 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; using Crestron.SimplSharpPro.DM.Endpoints; using Crestron.SimplSharpPro.DM.Endpoints.Receivers; - +using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Bridges; @@ -21,21 +16,15 @@ namespace PepperDash.Essentials.DM public class DmRmc4kScalerCDspController : DmRmcControllerBase, IRoutingInputsOutputs, IBasicVolumeWithFeedback, IIROutputPorts, IComPorts, ICec, IRelayPorts { - public DmRmc4kScalerCDsp Rmc { get; private set; } + private readonly DmRmc4kScalerCDsp _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } public RoutingOutputPort BalancedAudioOut { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut, BalancedAudioOut }; } - } + public RoutingPortCollection OutputPorts { get; private set; } /// /// Make a Crestron RMC and put it in here @@ -43,10 +32,11 @@ namespace PepperDash.Essentials.DM public DmRmc4kScalerCDspController(string key, string name, DmRmc4kScalerCDsp rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); BalancedAudioOut = new RoutingOutputPort(DmPortName.BalancedAudioOut, eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio, null, this); @@ -55,18 +45,21 @@ namespace PepperDash.Essentials.DM VolumeLevelFeedback = new IntFeedback("MainVolumeLevelFeedback", () => rmc.AudioOutput.VolumeFeedback.UShortValue); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); - Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut, BalancedAudioOut}; + + _rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; } void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) @@ -80,28 +73,21 @@ namespace PepperDash.Essentials.DM void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); - } - } - - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); } public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) @@ -110,32 +96,32 @@ namespace PepperDash.Essentials.DM } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members /// /// Gets the CEC stream directly from the HDMI port. /// - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion #region IRelayPorts Members public int NumberOfRelayPorts { - get { return Rmc.NumberOfRelayPorts; } + get { return _rmc.NumberOfRelayPorts; } } public CrestronCollection RelayPorts { - get { return Rmc.RelayPorts; } + get { return _rmc.RelayPorts; } } #endregion @@ -153,6 +139,7 @@ namespace PepperDash.Essentials.DM /// public void MuteOff() { + Debug.Console(2, this, "DM Endpoint {0} does not have a mute function", Key); } /// @@ -160,11 +147,12 @@ namespace PepperDash.Essentials.DM /// public void MuteOn() { + Debug.Console(2, this, "DM Endpoint {0} does not have a mute function", Key); } public void SetVolume(ushort level) { - Rmc.AudioOutput.Volume.UShortValue = level; + _rmc.AudioOutput.Volume.UShortValue = level; } public IntFeedback VolumeLevelFeedback @@ -182,22 +170,23 @@ namespace PepperDash.Essentials.DM /// public void MuteToggle() { + Debug.Console(2, this, "DM Endpoint {0} does not have a mute function", Key); } public void VolumeDown(bool pressRelease) { if (pressRelease) - SigHelper.RampTimeScaled(Rmc.AudioOutput.Volume, 0, 4000); + SigHelper.RampTimeScaled(_rmc.AudioOutput.Volume, 0, 4000); else - Rmc.AudioOutput.Volume.StopRamp(); + _rmc.AudioOutput.Volume.StopRamp(); } public void VolumeUp(bool pressRelease) { if (pressRelease) - SigHelper.RampTimeScaled(Rmc.AudioOutput.Volume, 65535, 4000); + SigHelper.RampTimeScaled(_rmc.AudioOutput.Volume, 65535, 4000); else - Rmc.AudioOutput.Volume.StopRamp(); + _rmc.AudioOutput.Volume.StopRamp(); } #endregion diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kZ100CController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kZ100CController.cs index 33705c0a..946613a8 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kZ100CController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kZ100CController.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; using Crestron.SimplSharpPro.DM.Endpoints; using Crestron.SimplSharpPro.DM.Endpoints.Receivers; @@ -23,16 +17,6 @@ namespace PepperDash.Essentials.DM { _rmc = rmc; - /* removed this logic because it's done in the base constructor and doesn't need to be duplicated here - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, - eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, - eRoutingPortConnectionType.Hdmi, null, this) {Port = _rmc}; - */ - - // Set Ports for CEC - - //TODO: We need to look at this class inheritance design...not so sure these properties need to be virtual and/or abstract. EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); @@ -53,21 +37,20 @@ namespace PepperDash.Essentials.DM void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } } diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kZScalerCController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kZScalerCController.cs index a42b6771..81fcf69b 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kZScalerCController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4kZScalerCController.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; @@ -18,92 +14,82 @@ namespace PepperDash.Essentials.DM public class DmRmc4kZScalerCController : DmRmcControllerBase, IRmcRouting, IIROutputPorts, IComPorts, ICec { - public DmRmc4kzScalerC Rmc { get; private set; } + private readonly DmRmc4kzScalerC _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingInputPort HdmiIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } - /// - /// The value of the current video source for the HDMI output on the receiver + /// + /// The value of the current video source for the HDMI output on the receiver /// public IntFeedback AudioVideoSourceNumericFeedback { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn, HdmiIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut }; } - } + public RoutingPortCollection OutputPorts { get; private set; } public DmRmc4kZScalerCController(string key, string name, DmRmc4kzScalerC rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiIn = new RoutingInputPort(DmPortName.HdmiIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiIn = new RoutingInputPort(DmPortName.HdmiIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); - Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + InputPorts = new RoutingPortCollection {DmIn, HdmiIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; + + _rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; - AudioVideoSourceNumericFeedback = new IntFeedback(() => (ushort)(Rmc.SelectedSourceFeedback)); + AudioVideoSourceNumericFeedback = new IntFeedback(() => (ushort)(_rmc.SelectedSourceFeedback)); } void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) - { - if (args.EventId == EndpointOutputStreamEventIds.HorizontalResolutionFeedbackEventId || args.EventId == EndpointOutputStreamEventIds.VerticalResolutionFeedbackEventId || - args.EventId == EndpointOutputStreamEventIds.FramesPerSecondFeedbackEventId) - { - VideoOutputResolutionFeedback.FireUpdate(); + { + if (args.EventId == EndpointOutputStreamEventIds.HorizontalResolutionFeedbackEventId || args.EventId == EndpointOutputStreamEventIds.VerticalResolutionFeedbackEventId || + args.EventId == EndpointOutputStreamEventIds.FramesPerSecondFeedbackEventId) + { + VideoOutputResolutionFeedback.FireUpdate(); } if (args.EventId == EndpointOutputStreamEventIds.SelectedSourceFeedbackEventId) { AudioVideoSourceNumericFeedback.FireUpdate(); - } - } - - void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) - { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) - { - EdidManufacturerFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); - } + } } - public override bool CustomActivate() + void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); + switch (args.EventId) + { + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; + } } public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) @@ -112,20 +98,20 @@ namespace PepperDash.Essentials.DM } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members /// /// Gets the CEC stream directly from the HDMI port. /// - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion @@ -136,14 +122,14 @@ namespace PepperDash.Essentials.DM var number = Convert.ToUInt16(inputSelector); - Rmc.AudioVideoSource = (DmRmc4kzScalerC.eAudioVideoSource)number; + _rmc.AudioVideoSource = (DmRmc4kzScalerC.eAudioVideoSource)number; } public void ExecuteNumericSwitch(ushort inputSelector, ushort outputSelector, eRoutingSignalType signalType) { Debug.Console(2, this, "Attempting a route from input {0} to HDMI Output", inputSelector); - Rmc.AudioVideoSource = (DmRmc4kzScalerC.eAudioVideoSource)inputSelector; + _rmc.AudioVideoSource = (DmRmc4kzScalerC.eAudioVideoSource)inputSelector; } #endregion diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs index 2f7f878c..648909fc 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs @@ -1,12 +1,7 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; -using Crestron.SimplSharpPro.DM.Endpoints; using Crestron.SimplSharpPro.DM.Endpoints.Receivers; using Newtonsoft.Json; using PepperDash.Core; @@ -19,33 +14,34 @@ namespace PepperDash.Essentials.DM { [Description("Wrapper class for all DM-RMC variants")] public abstract class DmRmcControllerBase : CrestronGenericBridgeableBaseDevice - { - public virtual StringFeedback VideoOutputResolutionFeedback { get; protected set; } - public virtual StringFeedback EdidManufacturerFeedback { get; protected set; } - public virtual StringFeedback EdidNameFeedback { get; protected set; } - public virtual StringFeedback EdidPreferredTimingFeedback { get; protected set; } - public virtual StringFeedback EdidSerialNumberFeedback { get; protected set; } + { + private readonly EndpointReceiverBase _rmc; //kept here just in case. Only property or method on this class that's not device-specific is the DMOutput that it's attached to. + + public StringFeedback VideoOutputResolutionFeedback { get; protected set; } + public StringFeedback EdidManufacturerFeedback { get; protected set; } + public StringFeedback EdidNameFeedback { get; protected set; } + public StringFeedback EdidPreferredTimingFeedback { get; protected set; } + public StringFeedback EdidSerialNumberFeedback { get; protected set; } protected DmRmcControllerBase(string key, string name, EndpointReceiverBase device) : base(key, name, device) - { + { + _rmc = device; // if wired to a chassis, skip registration step in base class - if (device.DMOutput != null) - { - this.PreventRegistration = true; - } + PreventRegistration = _rmc.DMOutput != null; + AddToFeedbackList(VideoOutputResolutionFeedback, EdidManufacturerFeedback, EdidSerialNumberFeedback, EdidNameFeedback, EdidPreferredTimingFeedback); } protected void LinkDmRmcToApi(DmRmcControllerBase rmc, BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) - { + { var joinMap = new DmRmcControllerJoinMap(joinStart); var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey); if (!string.IsNullOrEmpty(joinMapSerialized)) - joinMap = JsonConvert.DeserializeObject(joinMapSerialized); - + joinMap = JsonConvert.DeserializeObject(joinMapSerialized); + bridge.AddJoinMap(Key, joinMap); Debug.Console(1, rmc, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); @@ -65,247 +61,251 @@ namespace PepperDash.Essentials.DM //If the device is an DM-RMC-4K-Z-SCALER-C var routing = rmc as IRmcRouting; - if (routing != null) + if (routing == null) { - if (routing.AudioVideoSourceNumericFeedback != null) - routing.AudioVideoSourceNumericFeedback.LinkInputSig(trilist.UShortInput[joinMap.AudioVideoSource.JoinNumber]); - - trilist.SetUShortSigAction(joinMap.AudioVideoSource.JoinNumber, (a) => routing.ExecuteNumericSwitch(a, 1, eRoutingSignalType.AudioVideo)); + return; } + + if (routing.AudioVideoSourceNumericFeedback != null) + routing.AudioVideoSourceNumericFeedback.LinkInputSig(trilist.UShortInput[joinMap.AudioVideoSource.JoinNumber]); + + trilist.SetUShortSigAction(joinMap.AudioVideoSource.JoinNumber, a => routing.ExecuteNumericSwitch(a, 1, eRoutingSignalType.AudioVideo)); } } public abstract class DmHdBaseTControllerBase : CrestronGenericBaseDevice { - public HDBaseTBase Rmc { get; protected set; } + protected HDBaseTBase Rmc; /// /// Make a Crestron RMC and put it in here /// - public DmHdBaseTControllerBase(string key, string name, HDBaseTBase rmc) + protected DmHdBaseTControllerBase(string key, string name, HDBaseTBase rmc) : base(key, name, rmc) { - + Rmc = rmc; } } public class DmRmcHelper { - /// - /// A factory method for various DmTxControllers - /// - /// - /// - /// - /// - public static CrestronGenericBaseDevice GetDmRmcController(string key, string name, string typeName, DmRmcPropertiesConfig props) + private static readonly Dictionary> ProcessorFactoryDict; + private static readonly Dictionary> ChassisCpu3Dict; + + private static readonly Dictionary> + ChassisDict; + + static DmRmcHelper() + { + ProcessorFactoryDict = new Dictionary> + { + {"dmrmc100c", (k, n, i) => new DmRmcX100CController(k, n, new DmRmc100C(i, Global.ControlSystem))}, + {"dmrmc100s", (k, n, i) => new DmRmc100SController(k, n, new DmRmc100S(i, Global.ControlSystem))}, + {"dmrmc4k100c", (k, n, i) => new DmRmcX100CController(k, n, new DmRmc4k100C(i, Global.ControlSystem))}, + {"dmrmc4kz100c", (k, n, i) => new DmRmc4kZ100CController(k, n, new DmRmc4kz100C(i, Global.ControlSystem))}, + {"dmrmc150s", (k, n, i) => new DmRmc150SController(k, n, new DmRmc150S(i, Global.ControlSystem))}, + {"dmrmc200c", (k, n, i) => new DmRmc200CController(k, n, new DmRmc200C(i, Global.ControlSystem))}, + {"dmrmc200s", (k, n, i) => new DmRmc200SController(k, n, new DmRmc200S(i, Global.ControlSystem))}, + {"dmrmc200s2", (k, n, i) => new DmRmc200S2Controller(k, n, new DmRmc200S2(i, Global.ControlSystem))}, + {"dmrmcscalerc", (k, n, i) => new DmRmcScalerCController(k, n, new DmRmcScalerC(i, Global.ControlSystem))}, + {"dmrmcscalers", (k, n, i) => new DmRmcScalerSController(k, n, new DmRmcScalerS(i, Global.ControlSystem))}, + { + "dmrmcscalers2", + (k, n, i) => new DmRmcScalerS2Controller(k, n, new DmRmcScalerS2(i, Global.ControlSystem)) + }, + { + "dmrmc4kscalerc", + (k, n, i) => new DmRmc4kScalerCController(k, n, new DmRmc4kScalerC(i, Global.ControlSystem)) + }, + { + "dmrmc4kscalercdsp", + (k, n, i) => new DmRmc4kScalerCDspController(k, n, new DmRmc4kScalerCDsp(i, Global.ControlSystem)) + }, + { + "dmrmc4kzscalerc", + (k, n, i) => new DmRmc4kZScalerCController(k, n, new DmRmc4kzScalerC(i, Global.ControlSystem)) + } + }; + + ChassisCpu3Dict = new Dictionary> + { + {"dmrmc100c", (k, n, d) => new DmRmcX100CController(k, n, new DmRmc100C(d))}, + {"dmrmc100s", (k, n, d) => new DmRmc100SController(k, n, new DmRmc100S(d))}, + {"dmrmc4k100c", (k, n, d) => new DmRmcX100CController(k, n, new DmRmc4k100C(d))}, + {"dmrmc4kz100c", (k, n, d) => new DmRmc4kZ100CController(k, n, new DmRmc4kz100C(d))}, + {"dmrmc150s", (k, n, d) => new DmRmc150SController(k, n, new DmRmc150S(d))}, + {"dmrmc200c", (k, n, d) => new DmRmc200CController(k, n, new DmRmc200C(d))}, + {"dmrmc200s", (k, n, d) => new DmRmc200SController(k, n, new DmRmc200S(d))}, + {"dmrmc200s2", (k, n, d) => new DmRmc200S2Controller(k, n, new DmRmc200S2(d))}, + {"dmrmcscalerc", (k, n, d) => new DmRmcScalerCController(k, n, new DmRmcScalerC(d))}, + {"dmrmcscalers", (k, n, d) => new DmRmcScalerSController(k, n, new DmRmcScalerS(d))}, + { + "dmrmcscalers2", + (k, n, d) => new DmRmcScalerS2Controller(k, n, new DmRmcScalerS2(d)) + }, + { + "dmrmc4kscalerc", + (k, n, d) => new DmRmc4kScalerCController(k, n, new DmRmc4kScalerC(d)) + }, + { + "dmrmc4kscalercdsp", + (k, n, d) => new DmRmc4kScalerCDspController(k, n, new DmRmc4kScalerCDsp(d)) + }, + { + "dmrmc4kzscalerc", + (k, n, d) => new DmRmc4kZScalerCController(k, n, new DmRmc4kzScalerC(d)) + }, + {"hdbasetrx", (k,n,d) => new HDBaseTRxController(k,n, new HDRx3CB(d))}, + {"dmrmc4k100c1g", (k,n,d) => new DmRmc4k100C1GController(k,n, new DmRmc4K100C1G(d))} + }; + + ChassisDict = new Dictionary> + { + {"dmrmc100c", (k, n, i, d) => new DmRmcX100CController(k, n, new DmRmc100C(i,d))}, + {"dmrmc100s", (k, n,i, d) => new DmRmc100SController(k, n, new DmRmc100S(i,d))}, + {"dmrmc4k100c", (k, n,i, d) => new DmRmcX100CController(k, n, new DmRmc4k100C(i,d))}, + {"dmrmc4kz100c", (k, n,i, d) => new DmRmc4kZ100CController(k, n, new DmRmc4kz100C(i,d))}, + {"dmrmc150s", (k, n,i, d) => new DmRmc150SController(k, n, new DmRmc150S(i,d))}, + {"dmrmc200c", (k, n,i, d) => new DmRmc200CController(k, n, new DmRmc200C(i,d))}, + {"dmrmc200s", (k, n,i, d) => new DmRmc200SController(k, n, new DmRmc200S(i,d))}, + {"dmrmc200s2", (k, n,i, d) => new DmRmc200S2Controller(k, n, new DmRmc200S2(i,d))}, + {"dmrmcscalerc", (k, n,i, d) => new DmRmcScalerCController(k, n, new DmRmcScalerC(i,d))}, + {"dmrmcscalers", (k, n,i, d) => new DmRmcScalerSController(k, n, new DmRmcScalerS(i,d))}, + { + "dmrmcscalers2", + (k, n,i, d) => new DmRmcScalerS2Controller(k, n, new DmRmcScalerS2(d)) + }, + { + "dmrmc4kscalerc", + (k, n,i, d) => new DmRmc4kScalerCController(k, n, new DmRmc4kScalerC(d)) + }, + { + "dmrmc4kscalercdsp", + (k, n,i, d) => new DmRmc4kScalerCDspController(k, n, new DmRmc4kScalerCDsp(d)) + }, + { + "dmrmc4kzscalerc", + (k, n,i, d) => new DmRmc4kZScalerCController(k, n, new DmRmc4kzScalerC(d)) + }, + {"hdbasetrx", (k,n,i,d) => new HDBaseTRxController(k,n, new HDRx3CB(d))}, + {"dmrmc4k100c1g", (k,n,i,d) => new DmRmc4k100C1GController(k,n, new DmRmc4K100C1G(d))} + }; + } + /// + /// A factory method for various DmRmcControllers + /// + /// device key. Used to uniquely identify device + /// device name + /// device type name. Used to retrived the correct device + /// Config from config file + /// + public static CrestronGenericBaseDevice GetDmRmcController(string key, string name, string typeName, DmRmcPropertiesConfig props) { - // switch on type name... later... - typeName = typeName.ToLower(); - uint ipid = props.Control.IpIdInt; // Convert.ToUInt16(props.Id, 16); - - - - // right here, we need to grab the tie line that associates this - // RMC with a chassis or processor. If the RMC input's tie line is not - // connected to a chassis, then it's parent is the processor. - // If the RMC is connected to a chassis, then we need to grab the - // output number from the tie line and use that to plug it in. - // Example of chassis-connected: - //{ - // "sourceKey": "dmMd8x8-1", - // "sourcePort": "anyOut2", - // "destinationKey": "dmRmc100C-2", - // "destinationPort": "DmIn" - //} - - // Tx -> RMC link: - //{ - // "sourceKey": "dmTx201C-1", - // "sourcePort": "DmOut", - // "destinationKey": "dmRmc100C-2", - // "destinationPort": "DmIn" - //} - - var tlc = TieLineCollection.Default; - // grab the tie line that has this key as - // THIS DOESN'T WORK BECAUSE THE RMC THAT WE NEED (THIS) HASN'T BEEN MADE - // YET AND THUS WILL NOT HAVE A TIE LINE... - var inputTieLine = tlc.FirstOrDefault(t => - { - var d = t.DestinationPort.ParentDevice; - return d.Key.Equals(key, StringComparison.OrdinalIgnoreCase) - && d is DmChassisController; - }); + var ipid = props.Control.IpIdInt; var pKey = props.ParentDeviceKey.ToLower(); - - - // Non-DM-chassis endpoints - if (pKey == "processor") - { - // Catch constructor failures, mainly dues to IPID - try - { - if (typeName.StartsWith("dmrmc100c")) - return new DmRmcX100CController(key, name, new DmRmc100C(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc100s")) - return new DmRmc100SController(key, name, new DmRmc100S(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc4k100c")) - return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc4kz100c")) - return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc150s")) - return new DmRmc150SController(key, name, new DmRmc150S(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc200c")) - return new DmRmc200CController(key, name, new DmRmc200C(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc200s")) - return new DmRmc200SController(key, name, new DmRmc200S(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc200s2")) - return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmcscalerc")) - return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmcscalers")) - return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmcscalers2")) - return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc4kscalerc")) - return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc4kscalercdsp")) - return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, Global.ControlSystem)); - if (typeName.StartsWith("dmrmc4kzscalerc")) - return new DmRmc4kZScalerCController(key, name, new DmRmc4kzScalerC(ipid, Global.ControlSystem)); - } - catch (Exception e) - { - Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message); - } - - - Debug.Console(0, "Cannot create DM-RMC of type: '{0}'", typeName); - } - // Endpoints attached to DM Chassis - else - { - var parentDev = DeviceManager.GetDeviceForKey(pKey); - if (!(parentDev is IDmSwitch)) - { - Debug.Console(0, "Cannot create DM device '{0}'. '{1}' is not a DM Chassis.", - key, pKey); - return null; - } - - var chassis = (parentDev as IDmSwitch).Chassis; - var num = props.ParentOutputNumber; - if (num <= 0 || num > chassis.NumberOfOutputs) - { - Debug.Console(0, "Cannot create DM device '{0}'. Output number '{1}' is out of range", - key, num); - return null; - } - else - { - var controller = (parentDev as IDmSwitch); - controller.RxDictionary.Add(num, key); - } - // Catch constructor failures, mainly dues to IPID - try - { - - // Must use different constructor for CPU3 chassis types. No IPID - if (chassis is DmMd8x8Cpu3 || chassis is DmMd16x16Cpu3 || - chassis is DmMd32x32Cpu3 || chassis is DmMd8x8Cpu3rps || - chassis is DmMd16x16Cpu3rps || chassis is DmMd32x32Cpu3rps || - chassis is DmMd128x128 || chassis is DmMd64x64) - { - if (typeName.StartsWith("hdbasetrx")) - return new HDBaseTRxController(key, name, new HDRx3CB(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4k100c1g")) - return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc100c")) - return new DmRmcX100CController(key, name, new DmRmc100C(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc100s")) - return new DmRmc100SController(key, name, new DmRmc100S(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4k100c")) - return new DmRmcX100CController(key, name, new DmRmc4k100C(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4kz100c")) - return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc150s")) - return new DmRmc150SController(key, name, new DmRmc150S(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc200c")) - return new DmRmc200CController(key, name, new DmRmc200C(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc200s")) - return new DmRmc200SController(key, name, new DmRmc200S(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc200s2")) - return new DmRmc200S2Controller(key, name, new DmRmc200S2(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmcscalerc")) - return new DmRmcScalerCController(key, name, new DmRmcScalerC(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmcscalers")) - return new DmRmcScalerSController(key, name, new DmRmcScalerS(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmcscalers2")) - return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4kscalerc")) - return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4kscalercdsp")) - return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4kzscalerc")) - return new DmRmc4kZScalerCController(key, name, new DmRmc4kzScalerC(chassis.Outputs[num])); - } - else - { - if (typeName.StartsWith("hdbasetrx")) - return new HDBaseTRxController(key, name, new HDRx3CB(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4k100c1g")) - return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc100c")) - return new DmRmcX100CController(key, name, new DmRmc100C(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc100s")) - return new DmRmc100SController(key, name, new DmRmc100S(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4k100c")) - return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4kz100c")) - return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc150s")) - return new DmRmc150SController(key, name, new DmRmc150S(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc200c")) - return new DmRmc200CController(key, name, new DmRmc200C(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc200s")) - return new DmRmc200SController(key, name, new DmRmc200S(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc200s2")) - return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmcscalerc")) - return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmcscalers")) - return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmcscalers2")) - return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4kscalerc")) - return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4kscalercdsp")) - return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, chassis.Outputs[num])); - if (typeName.StartsWith("dmrmc4kzscalerc")) - return new DmRmc4kZScalerCController(key, name, new DmRmc4kzScalerC(chassis.Outputs[num])); - - } - } - catch (Exception e) - { - Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message); - } - } - - return null; + return pKey == "processor" ? GetDmRmcControllerForProcessor(key, name, typeName, ipid) : GetDmRmcControllerForChassis(key, name, typeName, props, pKey, ipid); } + + private static CrestronGenericBaseDevice GetDmRmcControllerForChassis(string key, string name, string typeName, + DmRmcPropertiesConfig props, string pKey, uint ipid) + { + var parentDev = DeviceManager.GetDeviceForKey(pKey); + if (!(parentDev is IDmSwitch)) + { + Debug.Console(0, "Cannot create DM device '{0}'. '{1}' is not a DM Chassis.", + key, pKey); + return null; + } + + var chassis = (parentDev as IDmSwitch).Chassis; + var num = props.ParentOutputNumber; + + if (num <= 0 || num > chassis.NumberOfOutputs) + { + Debug.Console(0, "Cannot create DM device '{0}'. Output number '{1}' is out of range", + key, num); + return null; + } + + var controller = parentDev as IDmSwitch; + controller.RxDictionary.Add(num, key); + // Catch constructor failures, mainly dues to IPID + try + { + // Must use different constructor for CPU3 chassis types. No IPID + if (chassis is DmMd8x8Cpu3 || chassis is DmMd16x16Cpu3 || + chassis is DmMd32x32Cpu3 || chassis is DmMd8x8Cpu3rps || + chassis is DmMd16x16Cpu3rps || chassis is DmMd32x32Cpu3rps || + chassis is DmMd128x128 || chassis is DmMd64x64) + { + return GetDmRmcControllerForCpu3Chassis(key, name, typeName, chassis, num, parentDev); + } + + return GetDmRmcControllerForCpu2Chassis(key, name, typeName, ipid, chassis, num, parentDev); + } + catch (Exception e) + { + Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message); + return null; + } + } + + private static CrestronGenericBaseDevice GetDmRmcControllerForCpu2Chassis(string key, string name, string typeName, + uint ipid, Switch chassis, uint num, IKeyed parentDev) + { + Func handler; + if (ChassisDict.TryGetValue(typeName.ToLower(), out handler)) + { + return handler(key, name, ipid, chassis.Outputs[num]); + } + Debug.Console(0, "Cannot create DM-RMC of type '{0}' with parent device {1}", typeName, parentDev.Key); + return null; + } + + private static CrestronGenericBaseDevice GetDmRmcControllerForCpu3Chassis(string key, string name, string typeName, + Switch chassis, uint num, IKeyed parentDev) + { + Func cpu3Handler; + if (ChassisCpu3Dict.TryGetValue(typeName.ToLower(), out cpu3Handler)) + { + return cpu3Handler(key, name, chassis.Outputs[num]); + } + Debug.Console(0, "Cannot create DM-RMC of type '{0}' with parent device {1}", typeName, parentDev.Key); + return null; + } + + private static CrestronGenericBaseDevice GetDmRmcControllerForProcessor(string key, string name, string typeName, uint ipid) + { + try + { + Func handler; + + if (ProcessorFactoryDict.TryGetValue(typeName.ToLower(), out handler)) + { + return handler(key, name, ipid); + } + Debug.Console(0, "Cannot create DM-RMC of type: '{0}'", typeName); + + return null; + } + catch (Exception e) + { + Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message); + return null; + } + } } public class DmRmcControllerFactory : EssentialsDeviceFactory { public DmRmcControllerFactory() { - TypeNames = new List() { "hdbasetrx", "dmrmc4k100c1g", "dmrmc100c", "dmrmc100s", "dmrmc4k100c", "dmrmc150s", + TypeNames = new List + { "hdbasetrx", "dmrmc4k100c1g", "dmrmc100c", "dmrmc100s", "dmrmc4k100c", "dmrmc150s", "dmrmc200c", "dmrmc200s", "dmrmc200s2", "dmrmcscalerc", "dmrmcscalers", "dmrmcscalers2", "dmrmc4kscalerc", "dmrmc4kscalercdsp", "dmrmc4kz100c", "dmrmckzscalerc" }; } @@ -317,8 +317,8 @@ namespace PepperDash.Essentials.DM Debug.Console(1, "Factory Attempting to create new DM-RMC Device"); var props = JsonConvert.DeserializeObject - (dc.Properties.ToString()); - return PepperDash.Essentials.DM.DmRmcHelper.GetDmRmcController(dc.Key, dc.Name, type, props); + (dc.Properties.ToString()); + return DmRmcHelper.GetDmRmcController(dc.Key, dc.Name, type, props); } } diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerCController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerCController.cs index 32044d48..8b2c1e98 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerCController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerCController.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; using Crestron.SimplSharpPro.DM.Endpoints; @@ -21,20 +16,14 @@ namespace PepperDash.Essentials.DM public class DmRmcScalerCController : DmRmcControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { - public DmRmcScalerC Rmc { get; private set; } + private readonly DmRmcScalerC _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut }; } - } + public RoutingPortCollection OutputPorts { get; private set; } /// /// Make a Crestron RMC and put it in here @@ -42,24 +31,27 @@ namespace PepperDash.Essentials.DM public DmRmcScalerCController(string key, string name, DmRmcScalerC rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); - Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + _rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; } void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) @@ -73,50 +65,43 @@ namespace PepperDash.Essentials.DM void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } } - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); - } - public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { LinkDmRmcToApi(this, trilist, joinStart, joinMapKey, bridge); } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members /// /// Gets the CEC stream directly from the HDMI port. /// - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerS2Controller.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerS2Controller.cs index 60c3ca07..1e014063 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerS2Controller.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerS2Controller.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; using Crestron.SimplSharpPro.DM.Endpoints; @@ -21,20 +16,14 @@ namespace PepperDash.Essentials.DM public class DmRmcScalerS2Controller : DmRmcControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { - public DmRmcScalerS2 Rmc { get; private set; } + private readonly DmRmcScalerS2 _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut }; } - } + public RoutingPortCollection OutputPorts { get; private set; } /// /// Make a Crestron RMC and put it in here @@ -42,24 +31,27 @@ namespace PepperDash.Essentials.DM public DmRmcScalerS2Controller(string key, string name, DmRmcScalerS2 rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); - Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + _rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; } void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) @@ -73,29 +65,23 @@ namespace PepperDash.Essentials.DM void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } } - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); - } public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { @@ -103,20 +89,20 @@ namespace PepperDash.Essentials.DM } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members /// /// Gets the CEC stream directly from the HDMI port. /// - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerSController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerSController.cs index e7b5a132..ba0f1ad7 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerSController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerSController.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; using Crestron.SimplSharpPro.DM.Endpoints; @@ -21,20 +16,14 @@ namespace PepperDash.Essentials.DM public class DmRmcScalerSController : DmRmcControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { - public DmRmcScalerS Rmc { get; private set; } + private readonly DmRmcScalerS _rmc; public RoutingInputPort DmIn { get; private set; } public RoutingOutputPort HdmiOut { get; private set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut }; } - } + public RoutingPortCollection OutputPorts { get; private set; } /// /// Make a Crestron RMC and put it in here @@ -42,24 +31,27 @@ namespace PepperDash.Essentials.DM public DmRmcScalerSController(string key, string name, DmRmcScalerS rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - EdidManufacturerFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); - EdidNameFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.Name.StringValue); - EdidPreferredTimingFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); - EdidSerialNumberFeedback = new StringFeedback(() => Rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); + EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue); + EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue); + EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue); + EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue); - VideoOutputResolutionFeedback = new StringFeedback(() => Rmc.HdmiOutput.GetVideoResolutionString()); + VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); - Rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; - Rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + _rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange; + _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; + + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; // Set Ports for CEC - HdmiOut.Port = Rmc.HdmiOutput; + HdmiOut.Port = _rmc.HdmiOutput; } void HdmiOutput_OutputStreamChange(EndpointOutputStream outputStream, EndpointOutputStreamEventArgs args) @@ -73,28 +65,21 @@ namespace PepperDash.Essentials.DM void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args) { - if (args.EventId == ConnectedDeviceEventIds.ManufacturerEventId) + switch (args.EventId) { - EdidManufacturerFeedback.FireUpdate(); + case ConnectedDeviceEventIds.ManufacturerEventId: + EdidManufacturerFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.NameEventId: + EdidNameFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.PreferredTimingEventId: + EdidPreferredTimingFeedback.FireUpdate(); + break; + case ConnectedDeviceEventIds.SerialNumberEventId: + EdidSerialNumberFeedback.FireUpdate(); + break; } - else if (args.EventId == ConnectedDeviceEventIds.NameEventId) - { - EdidNameFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.PreferredTimingEventId) - { - EdidPreferredTimingFeedback.FireUpdate(); - } - else if (args.EventId == ConnectedDeviceEventIds.SerialNumberEventId) - { - EdidSerialNumberFeedback.FireUpdate(); - } - } - - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); } public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) @@ -103,20 +88,20 @@ namespace PepperDash.Essentials.DM } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members /// /// Gets the CEC stream directly from the HDMI port. /// - public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcX100CController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcX100CController.cs index 16526bc0..6fa713ad 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcX100CController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcX100CController.cs @@ -1,12 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.DM; -using Crestron.SimplSharpPro.DM.Endpoints; using Crestron.SimplSharpPro.DM.Endpoints.Receivers; using PepperDash.Essentials.Core; @@ -21,20 +15,14 @@ namespace PepperDash.Essentials.DM public class DmRmcX100CController : DmRmcControllerBase, IRoutingInputsOutputs, IIROutputPorts, IComPorts, ICec { - public DmRmc100C Rmc { get; protected set; } + private readonly DmRmc100C _rmc; public RoutingInputPort DmIn { get; protected set; } public RoutingOutputPort HdmiOut { get; protected set; } - public RoutingPortCollection InputPorts - { - get { return new RoutingPortCollection { DmIn }; } - } + public RoutingPortCollection InputPorts { get; protected set; } - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection { HdmiOut }; } - } + public RoutingPortCollection OutputPorts { get; protected set; } /// /// Make a Crestron RMC and put it in here @@ -42,20 +30,14 @@ namespace PepperDash.Essentials.DM public DmRmcX100CController(string key, string name, DmRmc100C rmc) : base(key, name, rmc) { - Rmc = rmc; - DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.Audio | eRoutingSignalType.Video, + _rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 0, this); - HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, - eRoutingPortConnectionType.Hdmi, null, this); + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this) {Port = _rmc}; - // Set Ports for CEC - HdmiOut.Port = Rmc; // Unique case, this class has no HdmiOutput port and ICec is implemented on the receiver class itself - } - - public override bool CustomActivate() - { - // Base does register and sets up comm monitoring. - return base.CustomActivate(); + InputPorts = new RoutingPortCollection {DmIn}; + OutputPorts = new RoutingPortCollection {HdmiOut}; } public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) @@ -64,17 +46,17 @@ namespace PepperDash.Essentials.DM } #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } } #endregion #region IComPorts Members - public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } - public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + public CrestronCollection ComPorts { get { return _rmc.ComPorts; } } + public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } } #endregion #region ICec Members - public Cec StreamCec { get { return Rmc.StreamCec; } } + public Cec StreamCec { get { return _rmc.StreamCec; } } #endregion } } \ No newline at end of file diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx4kz302CController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx4kz302CController.cs index 1c5703a0..c0aebfae 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx4kz302CController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx4kz302CController.cs @@ -1,381 +1,381 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; -//using Crestron.SimplSharpPro.DeviceSupport; -using Crestron.SimplSharpPro.DeviceSupport; -using Crestron.SimplSharpPro.DM; -using Crestron.SimplSharpPro.DM.Endpoints; -using Crestron.SimplSharpPro.DM.Endpoints.Transmitters; - -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Bridges; -using PepperDash.Essentials.DM.Config; - -namespace PepperDash.Essentials.DM -{ - using eVst = Crestron.SimplSharpPro.DeviceSupport.eX02VideoSourceType; - using eAst = Crestron.SimplSharpPro.DeviceSupport.eX02AudioSourceType; - - public class DmTx4kz302CController : DmTxControllerBase, ITxRouting, IHasFeedback, - IIROutputPorts, IComPorts - { - public DmTx4kz302C Tx { get; private set; } - - public RoutingInputPortWithVideoStatuses HdmiIn1 { get; private set; } - public RoutingInputPortWithVideoStatuses HdmiIn2 { get; private set; } - public RoutingInputPortWithVideoStatuses DisplayPortIn { get; private set; } - public RoutingOutputPort DmOut { get; private set; } - public RoutingOutputPort HdmiLoopOut { get; private set; } - - public override StringFeedback ActiveVideoInputFeedback { get; protected set; } - public IntFeedback VideoSourceNumericFeedback { get; protected set; } - public IntFeedback AudioSourceNumericFeedback { get; protected set; } - public IntFeedback HdmiIn1HdcpCapabilityFeedback { get; protected set; } - public IntFeedback HdmiIn2HdcpCapabilityFeedback { get; protected set; } - public BoolFeedback Hdmi1VideoSyncFeedback { get; protected set; } - public BoolFeedback Hdmi2VideoSyncFeedback { get; protected set; } - public BoolFeedback DisplayPortVideoSyncFeedback { get; protected set; } - - //public override IntFeedback HdcpSupportAllFeedback { get; protected set; } - //public override ushort HdcpSupportCapability { get; protected set; } - - /// - /// Helps get the "real" inputs, including when in Auto - /// - public Crestron.SimplSharpPro.DeviceSupport.eX02VideoSourceType ActualActiveVideoInput - { - get - { - if (Tx.VideoSourceFeedback != eVst.Auto) - return Tx.VideoSourceFeedback; - else // auto - { - if (Tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue) - return eVst.Hdmi1; - else if (Tx.HdmiInputs[2].SyncDetectedFeedback.BoolValue) - return eVst.Hdmi2; - else if (Tx.DisplayPortInput.SyncDetectedFeedback.BoolValue) - return eVst.Vga; - else - return eVst.AllDisabled; - } - } - } - public RoutingPortCollection InputPorts - { - get - { - return new RoutingPortCollection - { - HdmiIn1, - HdmiIn2, - DisplayPortIn, - AnyVideoInput - }; - } - } - public RoutingPortCollection OutputPorts - { - get - { - return new RoutingPortCollection { DmOut, HdmiLoopOut }; - } - } - public DmTx4kz302CController(string key, string name, DmTx4kz302C tx) - : base(key, name, tx) - { - Tx = tx; - - HdmiIn1 = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn1, - eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, eVst.Hdmi1, this, - VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInputs[1])); - HdmiIn2 = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn2, - eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, eVst.Hdmi2, this, - VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInputs[2])); - DisplayPortIn = new RoutingInputPortWithVideoStatuses(DmPortName.VgaIn, - eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DisplayPort, eVst.DisplayPort, this, - VideoStatusHelper.GetDisplayPortInputStatusFuncs(tx.DisplayPortInput)); - ActiveVideoInputFeedback = new StringFeedback("ActiveVideoInput", - () => ActualActiveVideoInput.ToString()); - - Tx.HdmiInputs[1].InputStreamChange += InputStreamChangeEvent; - Tx.HdmiInputs[2].InputStreamChange += InputStreamChangeEvent; - Tx.BaseEvent += Tx_BaseEvent; - - VideoSourceNumericFeedback = new IntFeedback(() => - { - return (int)Tx.VideoSourceFeedback; - }); - AudioSourceNumericFeedback = new IntFeedback(() => - { - return (int)Tx.AudioSourceFeedback; - }); - - HdmiIn1HdcpCapabilityFeedback = new IntFeedback("HdmiIn1HdcpCapability", () => - { - return (int)tx.HdmiInputs[1].HdcpCapabilityFeedback; - }); - - HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => - { - return (int)tx.HdmiInputs[2].HdcpCapabilityFeedback; - }); - - HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support; - - Hdmi1VideoSyncFeedback = new BoolFeedback(() => - { - return (bool)tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue; - }); - - Hdmi2VideoSyncFeedback = new BoolFeedback(() => - { - return (bool)tx.HdmiInputs[2].SyncDetectedFeedback.BoolValue; - }); - - DisplayPortVideoSyncFeedback = new BoolFeedback(() => - { - return (bool)tx.DisplayPortInput.SyncDetectedFeedback.BoolValue; - }); - - - var combinedFuncs = new VideoStatusFuncsWrapper - { - HdcpActiveFeedbackFunc = () => - (ActualActiveVideoInput == eVst.Hdmi1 - && tx.HdmiInputs[1].VideoAttributes.HdcpActiveFeedback.BoolValue) - || (ActualActiveVideoInput == eVst.Hdmi2 - && tx.HdmiInputs[2].VideoAttributes.HdcpActiveFeedback.BoolValue), - - HdcpStateFeedbackFunc = () => - { - if (ActualActiveVideoInput == eVst.Hdmi1) - return tx.HdmiInputs[1].VideoAttributes.HdcpStateFeedback.ToString(); - if (ActualActiveVideoInput == eVst.Hdmi2) - return tx.HdmiInputs[2].VideoAttributes.HdcpStateFeedback.ToString(); - return ""; - }, - - VideoResolutionFeedbackFunc = () => - { - if (ActualActiveVideoInput == eVst.Hdmi1) - return tx.HdmiInputs[1].VideoAttributes.GetVideoResolutionString(); - if (ActualActiveVideoInput == eVst.Hdmi2) - return tx.HdmiInputs[2].VideoAttributes.GetVideoResolutionString(); - if (ActualActiveVideoInput == eVst.Vga) - return tx.DisplayPortInput.VideoAttributes.GetVideoResolutionString(); - return ""; - }, - VideoSyncFeedbackFunc = () => - (ActualActiveVideoInput == eVst.Hdmi1 - && tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue) - || (ActualActiveVideoInput == eVst.Hdmi2 - && tx.HdmiInputs[2].SyncDetectedFeedback.BoolValue) - || (ActualActiveVideoInput == eVst.Vga - && tx.DisplayPortInput.SyncDetectedFeedback.BoolValue) - - }; - - AnyVideoInput = new RoutingInputPortWithVideoStatuses(DmPortName.AnyVideoIn, - eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.None, 0, this, combinedFuncs); - - DmOut = new RoutingOutputPort(DmPortName.DmOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, - eRoutingPortConnectionType.DmCat, null, this); - HdmiLoopOut = new RoutingOutputPort(DmPortName.HdmiLoopOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, - eRoutingPortConnectionType.Hdmi, null, this); - - - AddToFeedbackList(ActiveVideoInputFeedback, VideoSourceNumericFeedback, AudioSourceNumericFeedback, - AnyVideoInput.VideoStatus.HasVideoStatusFeedback, AnyVideoInput.VideoStatus.HdcpActiveFeedback, - AnyVideoInput.VideoStatus.HdcpStateFeedback, AnyVideoInput.VideoStatus.VideoResolutionFeedback, - AnyVideoInput.VideoStatus.VideoSyncFeedback, HdmiIn1HdcpCapabilityFeedback, HdmiIn2HdcpCapabilityFeedback, - Hdmi1VideoSyncFeedback, Hdmi2VideoSyncFeedback, DisplayPortVideoSyncFeedback); - - // Set Ports for CEC - HdmiIn1.Port = Tx.HdmiInputs[1]; - HdmiIn2.Port = Tx.HdmiInputs[2]; - HdmiLoopOut.Port = Tx.HdmiOutput; - DmOut.Port = Tx.DmOutput; - } - - - - public override bool CustomActivate() - { - // Link up all of these damned events to the various RoutingPorts via a helper handler - Tx.HdmiInputs[1].InputStreamChange += (o, a) => FowardInputStreamChange(HdmiIn1, a.EventId); - Tx.HdmiInputs[1].VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(HdmiIn1, a.EventId); - - Tx.HdmiInputs[2].InputStreamChange += (o, a) => FowardInputStreamChange(HdmiIn2, a.EventId); - Tx.HdmiInputs[2].VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(HdmiIn2, a.EventId); - - Tx.DisplayPortInput.InputStreamChange += (o, a) => FowardInputStreamChange(DisplayPortIn, a.EventId); - Tx.DisplayPortInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(DisplayPortIn, a.EventId); - - // Base does register and sets up comm monitoring. - return base.CustomActivate(); - } - - public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) - { - DmTxControllerJoinMap joinMap = GetDmTxJoinMap(joinStart, joinMapKey); - - if (Hdmi1VideoSyncFeedback != null) +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.DM; +using Crestron.SimplSharpPro.DM.Endpoints; +using Crestron.SimplSharpPro.DM.Endpoints.Transmitters; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Bridges; +using PepperDash.Essentials.DM.Config; + +namespace PepperDash.Essentials.DM +{ + using eVst = Crestron.SimplSharpPro.DeviceSupport.eX02VideoSourceType; + using eAst = Crestron.SimplSharpPro.DeviceSupport.eX02AudioSourceType; + + public class DmTx4kz302CController : DmTxControllerBase, ITxRouting, IHasFeedback, + IIROutputPorts, IComPorts + { + public DmTx4kz302C Tx { get; private set; } + + public RoutingInputPortWithVideoStatuses HdmiIn1 { get; private set; } + public RoutingInputPortWithVideoStatuses HdmiIn2 { get; private set; } + public RoutingInputPortWithVideoStatuses DisplayPortIn { get; private set; } + public RoutingOutputPort DmOut { get; private set; } + public RoutingOutputPort HdmiLoopOut { get; private set; } + + public override StringFeedback ActiveVideoInputFeedback { get; protected set; } + public IntFeedback VideoSourceNumericFeedback { get; protected set; } + public IntFeedback AudioSourceNumericFeedback { get; protected set; } + public IntFeedback HdmiIn1HdcpCapabilityFeedback { get; protected set; } + public IntFeedback HdmiIn2HdcpCapabilityFeedback { get; protected set; } + public BoolFeedback Hdmi1VideoSyncFeedback { get; protected set; } + public BoolFeedback Hdmi2VideoSyncFeedback { get; protected set; } + public BoolFeedback DisplayPortVideoSyncFeedback { get; protected set; } + + //public override IntFeedback HdcpSupportAllFeedback { get; protected set; } + //public override ushort HdcpSupportCapability { get; protected set; } + + /// + /// Helps get the "real" inputs, including when in Auto + /// + public Crestron.SimplSharpPro.DeviceSupport.eX02VideoSourceType ActualActiveVideoInput + { + get { - Hdmi1VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input1VideoSyncStatus.JoinNumber]); - } - if (Hdmi2VideoSyncFeedback != null) + if (Tx.VideoSourceFeedback != eVst.Auto) + return Tx.VideoSourceFeedback; + else // auto + { + if (Tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue) + return eVst.Hdmi1; + else if (Tx.HdmiInputs[2].SyncDetectedFeedback.BoolValue) + return eVst.Hdmi2; + else if (Tx.DisplayPortInput.SyncDetectedFeedback.BoolValue) + return eVst.Vga; + else + return eVst.AllDisabled; + } + } + } + public RoutingPortCollection InputPorts + { + get { - Hdmi2VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input2VideoSyncStatus.JoinNumber]); - } - if (DisplayPortVideoSyncFeedback != null) + return new RoutingPortCollection + { + HdmiIn1, + HdmiIn2, + DisplayPortIn, + AnyVideoInput + }; + } + } + public RoutingPortCollection OutputPorts + { + get { - DisplayPortVideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input3VideoSyncStatus.JoinNumber]); - } - - LinkDmTxToApi(this, trilist, joinMap, bridge); - } - - public void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type) - { - Debug.Console(2, this, "Executing Numeric Switch to input {0}.", input); - - switch (input) - { - case 0: - { - ExecuteSwitch(eVst.Auto, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); - break; - } - case 1: - { - ExecuteSwitch(HdmiIn1.Selector, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); - break; - } - case 2: - { - ExecuteSwitch(HdmiIn2.Selector, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); - break; - } - case 3: - { - ExecuteSwitch(DisplayPortIn.Selector, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); - break; - } - case 4: - { - ExecuteSwitch(eVst.AllDisabled, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); - break; - } - } - - - } - - public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType) - { - if ((signalType | eRoutingSignalType.Video) == eRoutingSignalType.Video) - Tx.VideoSource = (eVst)inputSelector; - - // NOTE: It's possible that this particular TX model may not like the AudioSource property being set. - // The SIMPL definition only shows a single analog for AudioVideo Source - if ((signalType | eRoutingSignalType.Audio) == eRoutingSignalType.Audio) - Tx.AudioSource = (eAst)inputSelector; - } - - void InputStreamChangeEvent(EndpointInputStream inputStream, EndpointInputStreamEventArgs args) - { - Debug.Console(2, "{0} event {1} stream {2}", this.Tx.ToString(), inputStream.ToString(), args.EventId.ToString()); - - if (args.EventId == EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId) - { - if (inputStream == Tx.HdmiInputs[1]) - HdmiIn1HdcpCapabilityFeedback.FireUpdate(); - else if (inputStream == Tx.HdmiInputs[2]) - HdmiIn2HdcpCapabilityFeedback.FireUpdate(); - } - else if (args.EventId == EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId) - { - if (inputStream == Tx.HdmiInputs[1]) - HdmiIn1HdcpCapabilityFeedback.FireUpdate(); - else if (inputStream == Tx.HdmiInputs[2]) - HdmiIn2HdcpCapabilityFeedback.FireUpdate(); - } - } - - void Tx_BaseEvent(GenericBase device, BaseEventArgs args) - { - var id = args.EventId; - if (id == EndpointTransmitterBase.VideoSourceFeedbackEventId) - { - Debug.Console(2, this, " Video Source: {0}", Tx.VideoSourceFeedback); - VideoSourceNumericFeedback.FireUpdate(); - ActiveVideoInputFeedback.FireUpdate(); - } - - // ------------------------------ incomplete ----------------------------------------- - else if (id == EndpointTransmitterBase.AudioSourceFeedbackEventId) - { - Debug.Console(2, this, " Audio Source: {0}", Tx.AudioSourceFeedback); - AudioSourceNumericFeedback.FireUpdate(); - } - } - - /// - /// Relays the input stream change to the appropriate RoutingInputPort. - /// - void FowardInputStreamChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) - { - if (eventId == EndpointInputStreamEventIds.SyncDetectedFeedbackEventId) - { - inputPort.VideoStatus.VideoSyncFeedback.FireUpdate(); - AnyVideoInput.VideoStatus.VideoSyncFeedback.FireUpdate(); - } - } - - /// - /// Relays the VideoAttributes change to a RoutingInputPort - /// - void ForwardVideoAttributeChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) - { - //// LOCATION: Crestron.SimplSharpPro.DM.VideoAttributeEventIds - //Debug.Console(2, this, "VideoAttributes_AttributeChange event id={0} from {1}", - // args.EventId, (sender as VideoAttributesEnhanced).Owner.GetType()); - switch (eventId) - { - case VideoAttributeEventIds.HdcpActiveFeedbackEventId: - inputPort.VideoStatus.HdcpActiveFeedback.FireUpdate(); - AnyVideoInput.VideoStatus.HdcpActiveFeedback.FireUpdate(); - break; - case VideoAttributeEventIds.HdcpStateFeedbackEventId: - inputPort.VideoStatus.HdcpStateFeedback.FireUpdate(); - AnyVideoInput.VideoStatus.HdcpStateFeedback.FireUpdate(); - break; - case VideoAttributeEventIds.HorizontalResolutionFeedbackEventId: - case VideoAttributeEventIds.VerticalResolutionFeedbackEventId: - inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate(); - AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate(); - break; - case VideoAttributeEventIds.FramesPerSecondFeedbackEventId: - inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate(); - AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate(); - break; - } - } - - - #region IIROutputPorts Members - public CrestronCollection IROutputPorts { get { return Tx.IROutputPorts; } } - public int NumberOfIROutputPorts { get { return Tx.NumberOfIROutputPorts; } } - #endregion - - #region IComPorts Members - public CrestronCollection ComPorts { get { return Tx.ComPorts; } } - public int NumberOfComPorts { get { return Tx.NumberOfComPorts; } } - #endregion - } + return new RoutingPortCollection { DmOut, HdmiLoopOut }; + } + } + public DmTx4kz302CController(string key, string name, DmTx4kz302C tx) + : base(key, name, tx) + { + Tx = tx; + + HdmiIn1 = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn1, + eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, eVst.Hdmi1, this, + VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInputs[1])); + HdmiIn2 = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn2, + eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, eVst.Hdmi2, this, + VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInputs[2])); + DisplayPortIn = new RoutingInputPortWithVideoStatuses(DmPortName.VgaIn, + eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.DisplayPort, eVst.DisplayPort, this, + VideoStatusHelper.GetDisplayPortInputStatusFuncs(tx.DisplayPortInput)); + ActiveVideoInputFeedback = new StringFeedback("ActiveVideoInput", + () => ActualActiveVideoInput.ToString()); + + Tx.HdmiInputs[1].InputStreamChange += InputStreamChangeEvent; + Tx.HdmiInputs[2].InputStreamChange += InputStreamChangeEvent; + Tx.BaseEvent += Tx_BaseEvent; + + VideoSourceNumericFeedback = new IntFeedback(() => + { + return (int)Tx.VideoSourceFeedback; + }); + AudioSourceNumericFeedback = new IntFeedback(() => + { + return (int)Tx.AudioSourceFeedback; + }); + + HdmiIn1HdcpCapabilityFeedback = new IntFeedback("HdmiIn1HdcpCapability", () => + { + return (int)tx.HdmiInputs[1].HdcpCapabilityFeedback; + }); + + HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => + { + return (int)tx.HdmiInputs[2].HdcpCapabilityFeedback; + }); + + HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support; + + Hdmi1VideoSyncFeedback = new BoolFeedback(() => + { + return (bool)tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue; + }); + + Hdmi2VideoSyncFeedback = new BoolFeedback(() => + { + return (bool)tx.HdmiInputs[2].SyncDetectedFeedback.BoolValue; + }); + + DisplayPortVideoSyncFeedback = new BoolFeedback(() => + { + return (bool)tx.DisplayPortInput.SyncDetectedFeedback.BoolValue; + }); + + + var combinedFuncs = new VideoStatusFuncsWrapper + { + HdcpActiveFeedbackFunc = () => + (ActualActiveVideoInput == eVst.Hdmi1 + && tx.HdmiInputs[1].VideoAttributes.HdcpActiveFeedback.BoolValue) + || (ActualActiveVideoInput == eVst.Hdmi2 + && tx.HdmiInputs[2].VideoAttributes.HdcpActiveFeedback.BoolValue), + + HdcpStateFeedbackFunc = () => + { + if (ActualActiveVideoInput == eVst.Hdmi1) + return tx.HdmiInputs[1].VideoAttributes.HdcpStateFeedback.ToString(); + if (ActualActiveVideoInput == eVst.Hdmi2) + return tx.HdmiInputs[2].VideoAttributes.HdcpStateFeedback.ToString(); + return ""; + }, + + VideoResolutionFeedbackFunc = () => + { + if (ActualActiveVideoInput == eVst.Hdmi1) + return tx.HdmiInputs[1].VideoAttributes.GetVideoResolutionString(); + if (ActualActiveVideoInput == eVst.Hdmi2) + return tx.HdmiInputs[2].VideoAttributes.GetVideoResolutionString(); + if (ActualActiveVideoInput == eVst.Vga) + return tx.DisplayPortInput.VideoAttributes.GetVideoResolutionString(); + return ""; + }, + VideoSyncFeedbackFunc = () => + (ActualActiveVideoInput == eVst.Hdmi1 + && tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue) + || (ActualActiveVideoInput == eVst.Hdmi2 + && tx.HdmiInputs[2].SyncDetectedFeedback.BoolValue) + || (ActualActiveVideoInput == eVst.Vga + && tx.DisplayPortInput.SyncDetectedFeedback.BoolValue) + + }; + + AnyVideoInput = new RoutingInputPortWithVideoStatuses(DmPortName.AnyVideoIn, + eRoutingSignalType.Audio | eRoutingSignalType.Video, eRoutingPortConnectionType.None, 0, this, combinedFuncs); + + DmOut = new RoutingOutputPort(DmPortName.DmOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + eRoutingPortConnectionType.DmCat, null, this); + HdmiLoopOut = new RoutingOutputPort(DmPortName.HdmiLoopOut, eRoutingSignalType.Audio | eRoutingSignalType.Video, + eRoutingPortConnectionType.Hdmi, null, this); + + + AddToFeedbackList(ActiveVideoInputFeedback, VideoSourceNumericFeedback, AudioSourceNumericFeedback, + AnyVideoInput.VideoStatus.HasVideoStatusFeedback, AnyVideoInput.VideoStatus.HdcpActiveFeedback, + AnyVideoInput.VideoStatus.HdcpStateFeedback, AnyVideoInput.VideoStatus.VideoResolutionFeedback, + AnyVideoInput.VideoStatus.VideoSyncFeedback, HdmiIn1HdcpCapabilityFeedback, HdmiIn2HdcpCapabilityFeedback, + Hdmi1VideoSyncFeedback, Hdmi2VideoSyncFeedback, DisplayPortVideoSyncFeedback); + + // Set Ports for CEC + HdmiIn1.Port = Tx.HdmiInputs[1]; + HdmiIn2.Port = Tx.HdmiInputs[2]; + HdmiLoopOut.Port = Tx.HdmiOutput; + DmOut.Port = Tx.DmOutput; + } + + + + public override bool CustomActivate() + { + // Link up all of these damned events to the various RoutingPorts via a helper handler + Tx.HdmiInputs[1].InputStreamChange += (o, a) => FowardInputStreamChange(HdmiIn1, a.EventId); + Tx.HdmiInputs[1].VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(HdmiIn1, a.EventId); + + Tx.HdmiInputs[2].InputStreamChange += (o, a) => FowardInputStreamChange(HdmiIn2, a.EventId); + Tx.HdmiInputs[2].VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(HdmiIn2, a.EventId); + + Tx.DisplayPortInput.InputStreamChange += (o, a) => FowardInputStreamChange(DisplayPortIn, a.EventId); + Tx.DisplayPortInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(DisplayPortIn, a.EventId); + + // Base does register and sets up comm monitoring. + return base.CustomActivate(); + } + + public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) + { + DmTxControllerJoinMap joinMap = GetDmTxJoinMap(joinStart, joinMapKey); + + if (Hdmi1VideoSyncFeedback != null) + { + Hdmi1VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input1VideoSyncStatus.JoinNumber]); + } + if (Hdmi2VideoSyncFeedback != null) + { + Hdmi2VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input2VideoSyncStatus.JoinNumber]); + } + if (DisplayPortVideoSyncFeedback != null) + { + DisplayPortVideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Input3VideoSyncStatus.JoinNumber]); + } + + LinkDmTxToApi(this, trilist, joinMap, bridge); + } + + public void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type) + { + Debug.Console(2, this, "Executing Numeric Switch to input {0}.", input); + + switch (input) + { + case 0: + { + ExecuteSwitch(eVst.Auto, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); + break; + } + case 1: + { + ExecuteSwitch(HdmiIn1.Selector, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); + break; + } + case 2: + { + ExecuteSwitch(HdmiIn2.Selector, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); + break; + } + case 3: + { + ExecuteSwitch(DisplayPortIn.Selector, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); + break; + } + case 4: + { + ExecuteSwitch(eVst.AllDisabled, null, eRoutingSignalType.Audio | eRoutingSignalType.Video); + break; + } + } + + + } + + public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType) + { + if ((signalType | eRoutingSignalType.Video) == eRoutingSignalType.Video) + Tx.VideoSource = (eVst)inputSelector; + + // NOTE: It's possible that this particular TX model may not like the AudioSource property being set. + // The SIMPL definition only shows a single analog for AudioVideo Source + if ((signalType | eRoutingSignalType.Audio) == eRoutingSignalType.Audio) + Tx.AudioSource = (eAst)inputSelector; + } + + void InputStreamChangeEvent(EndpointInputStream inputStream, EndpointInputStreamEventArgs args) + { + Debug.Console(2, "{0} event {1} stream {2}", this.Tx.ToString(), inputStream.ToString(), args.EventId.ToString()); + + if (args.EventId == EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId) + { + if (inputStream == Tx.HdmiInputs[1]) + HdmiIn1HdcpCapabilityFeedback.FireUpdate(); + else if (inputStream == Tx.HdmiInputs[2]) + HdmiIn2HdcpCapabilityFeedback.FireUpdate(); + } + else if (args.EventId == EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId) + { + if (inputStream == Tx.HdmiInputs[1]) + HdmiIn1HdcpCapabilityFeedback.FireUpdate(); + else if (inputStream == Tx.HdmiInputs[2]) + HdmiIn2HdcpCapabilityFeedback.FireUpdate(); + } + } + + void Tx_BaseEvent(GenericBase device, BaseEventArgs args) + { + var id = args.EventId; + if (id == EndpointTransmitterBase.VideoSourceFeedbackEventId) + { + Debug.Console(2, this, " Video Source: {0}", Tx.VideoSourceFeedback); + VideoSourceNumericFeedback.FireUpdate(); + ActiveVideoInputFeedback.FireUpdate(); + } + + // ------------------------------ incomplete ----------------------------------------- + else if (id == EndpointTransmitterBase.AudioSourceFeedbackEventId) + { + Debug.Console(2, this, " Audio Source: {0}", Tx.AudioSourceFeedback); + AudioSourceNumericFeedback.FireUpdate(); + } + } + + /// + /// Relays the input stream change to the appropriate RoutingInputPort. + /// + void FowardInputStreamChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) + { + if (eventId == EndpointInputStreamEventIds.SyncDetectedFeedbackEventId) + { + inputPort.VideoStatus.VideoSyncFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.VideoSyncFeedback.FireUpdate(); + } + } + + /// + /// Relays the VideoAttributes change to a RoutingInputPort + /// + void ForwardVideoAttributeChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) + { + //// LOCATION: Crestron.SimplSharpPro.DM.VideoAttributeEventIds + //Debug.Console(2, this, "VideoAttributes_AttributeChange event id={0} from {1}", + // args.EventId, (sender as VideoAttributesEnhanced).Owner.GetType()); + switch (eventId) + { + case VideoAttributeEventIds.HdcpActiveFeedbackEventId: + inputPort.VideoStatus.HdcpActiveFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.HdcpActiveFeedback.FireUpdate(); + break; + case VideoAttributeEventIds.HdcpStateFeedbackEventId: + inputPort.VideoStatus.HdcpStateFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.HdcpStateFeedback.FireUpdate(); + break; + case VideoAttributeEventIds.HorizontalResolutionFeedbackEventId: + case VideoAttributeEventIds.VerticalResolutionFeedbackEventId: + inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate(); + break; + case VideoAttributeEventIds.FramesPerSecondFeedbackEventId: + inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate(); + break; + } + } + + + #region IIROutputPorts Members + public CrestronCollection IROutputPorts { get { return Tx.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return Tx.NumberOfIROutputPorts; } } + #endregion + + #region IComPorts Members + public CrestronCollection ComPorts { get { return Tx.ComPorts; } } + public int NumberOfComPorts { get { return Tx.NumberOfComPorts; } } + #endregion + } } \ No newline at end of file