From 6b21b37aef88cedeac3761ac3d69c854edfc9ec9 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Tue, 13 Aug 2019 21:40:22 -0600 Subject: [PATCH 1/5] First attempt to address HDCP setting on input cards/TXs on DmChassisControllerBridge --- .../Bridges/DmChassisControllerBridge.cs | 182 ++++++++++++++++-- .../Bridges/DmTxControllerBridge.cs | 2 +- 2 files changed, 162 insertions(+), 22 deletions(-) diff --git a/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs b/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs index f643dfab..08de8eee 100644 --- a/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs +++ b/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs @@ -5,6 +5,8 @@ using System.Text; using Crestron.SimplSharp; 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; @@ -38,26 +40,96 @@ namespace PepperDash.Essentials.Bridges if (dmChassis.TxDictionary.ContainsKey(ioSlot)) { Debug.Console(2, "Creating Tx Feedbacks {0}", ioSlot); - var TxKey = dmChassis.TxDictionary[ioSlot]; - var TxDevice = DeviceManager.GetDeviceForKey(TxKey) as DmTxControllerBase; + var txKey = dmChassis.TxDictionary[ioSlot]; + var txDevice = DeviceManager.GetDeviceForKey(txKey) as DmTxControllerBase; if (dmChassis.Chassis is DmMd8x8Cpu3 || dmChassis.Chassis is DmMd8x8Cpu3rps || dmChassis.Chassis is DmMd16x16Cpu3 || dmChassis.Chassis is DmMd16x16Cpu3rps || dmChassis.Chassis is DmMd32x32Cpu3 || dmChassis.Chassis is DmMd32x32Cpu3rps) { dmChassis.InputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]); } - else if (TxDevice != null) + else { - TxDevice.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]); + if (txDevice != null) + { + txDevice.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]); + } + } + + if (txDevice != null) + { + bool hdcpTypeSimple; + + if (txDevice.Hardware is DmTx4kX02CBase || txDevice.Hardware is DmTx4kzX02CBase) + hdcpTypeSimple = false; + else + hdcpTypeSimple = true; + + txDevice.AnyVideoInput.VideoStatus.VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]); + //TxDevice.SetPortHdcpCapability((eHdcpCapabilityType)(u),)); + + trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = (ushort)txDevice.HdcpSupportCapability; + + if (txDevice is ITxRouting) + { + var txR = txDevice as ITxRouting; + + trilist.BooleanInput[joinMap.TxHdcpSupportTypeSimple + ioSlot].BoolValue = hdcpTypeSimple; + + if (hdcpTypeSimple) + { + + if (txR.InputPorts[DmPortName.HdmiIn] != null) + { + var inputPort = txR.InputPorts[DmPortName.HdmiIn]; + + if (txDevice.Feedbacks["HdmiInHdcpCapability"] != null) + (txDevice.Feedbacks["HdmiInHdcpCapability"] as IntFeedback).LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState + ioSlot]); + + if (inputPort.ConnectionType == eRoutingPortConnectionType.Hdmi && inputPort.Port != null) + { + var port = inputPort.Port as EndpointHdmiInput; + + SetHdcpCapabilityAction(hdcpTypeSimple, port, joinMap.HdcpSupportState + ioSlot, trilist); + } + } + } + } + } + else + { + var inputPort = dmChassis.InputPorts[string.Format("inputCard{0}--hdmiIn", ioSlot)]; + if(inputPort != null) + { + var hdmiInPort = inputPort.Port; + + if (hdmiInPort != null) + { + if (hdmiInPort is HdmiInputWithCEC) + { + var hdmiInPortWCec = hdmiInPort as HdmiInputWithCEC; + + if (hdmiInPortWCec.HdcpSupportedLevel != eHdcpSupportedLevel.Unknown) + SetHdcpCapabilityAction(true, hdmiInPortWCec, joinMap.HdcpSupportState + ioSlot, trilist); + + //TODO: Figure out how the heck to get feedback properly. + } + + } + } + } - // TxDevice.AnyVideoInput.VideoStatus.VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]); - // trilist.SetUShortSigAction((ApiMap.HdcpSupport[ioSlot]), u => TxDevice.SetHdcpSupportAll((ePdtHdcpSupport)(u))); - // TxDevice.HdcpSupportAllFeedback.LinkInputSig(trilist.UShortInput[joinMap. + ioSlot]); - // trilist.UShortInput[ApiMap.HdcpSupportCapability[ioSlot]].UShortValue = TxDevice.HdcpSupportCapability; } else { - // dmChassis.VideoInputSyncFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[ApiMap.TxVideoSyncStatus[ioSlot]]); + dmChassis.VideoInputSyncFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus + ioSlot]); + + var inputPort = dmChassis.InputPorts[string.Format("inputCard{0}-hdmiIn", ioSlot)].Port as EndpointHdmiInput; + + if (inputPort != null) + { + //trilist.SetUShortSigAction((joinMap.HdcpSupport + ioSlot), u => + } } if (dmChassis.RxDictionary.ContainsKey(ioSlot)) { @@ -88,39 +160,107 @@ namespace PepperDash.Essentials.Bridges } } + static void SetHdcpCapabilityAction(bool hdcpTypeSimple, HdmiInputWithCEC port, uint join, BasicTriList trilist) + { + if (hdcpTypeSimple) + { + trilist.SetUShortSigAction(join, + new Action(s => + { + if (s == 0) + { + port.HdcpSupportOff(); + } + else if (s > 0) + { + port.HdcpSupportOn(); + } + })); + } + else + { + trilist.SetUShortSigAction(join, + new Action(s => + { + port.HdcpReceiveCapability = (eHdcpCapabilityType)s; + })); + } + } + + static void SetHdcpCapabilityAction(bool hdcpTypeSimple, EndpointHdmiInput port, uint join, BasicTriList trilist) + { + if (hdcpTypeSimple) + { + trilist.SetUShortSigAction(join, + new Action(s => + { + if (s == 0) + { + port.HdcpSupportOff(); + } + else if (s > 0) + { + port.HdcpSupportOn(); + } + })); + } + else + { + trilist.SetUShortSigAction(join, + new Action(s => + { + port.HdcpCapability = (eHdcpCapabilityType)s; + })); + } + } public class DmChassisControllerJoinMap : JoinMapBase { + //Digital public uint IsOnline { get; set; } + public uint VideoSyncStatus { get; set; } + public uint InputEndpointOnline { get; set; } + public uint OutputEndpointOnline { get; set; } + public uint TxHdcpSupportTypeSimple { get; set; } + + //Analog public uint OutputVideo { get; set; } public uint OutputAudio { get; set; } - public uint VideoSyncStatus { get; set; } + public uint HdcpSupportState { get; set; } + public uint HdcpSupportCapability { get; set; } + + //SErial public uint InputNames { get; set; } public uint OutputNames { get; set; } public uint OutputCurrentVideoInputNames { get; set; } public uint OutputCurrentAudioInputNames { get; set; } public uint InputCurrentResolution { get; set; } - public uint InputEndpointOnline { get; set; } - public uint OutputEndpointOnline { get; set; } - //public uint HdcpSupport { get; set; } - //public uint HdcpSupportCapability { get; set; } + public DmChassisControllerJoinMap() { + //Digital IsOnline = 11; + VideoSyncStatus = 100; //101-299 + InputEndpointOnline = 500; //501-699 + OutputEndpointOnline = 700; //701-899 + TxHdcpSupportTypeSimple = 1000; //1001-1199 + + //Analog OutputVideo = 100; //101-299 OutputAudio = 300; //301-499 - VideoSyncStatus = 100; //101-299 + HdcpSupportState = 1000; //1001-1199 + HdcpSupportCapability = 1200; //1201-1399 + + + //Serial InputNames = 100; //101-299 OutputNames = 300; //301-499 OutputCurrentVideoInputNames = 2000; //2001-2199 OutputCurrentAudioInputNames = 2200; //2201-2399 InputCurrentResolution = 2400; // 2401-2599 - InputEndpointOnline = 500; - OutputEndpointOnline = 700; - //HdcpSupport = 1000; //1001-1199 - //HdcpSupportCapability = 1200; //1201-1399 + } @@ -139,8 +279,8 @@ namespace PepperDash.Essentials.Bridges InputCurrentResolution = InputCurrentResolution + joinOffset; InputEndpointOnline = InputEndpointOnline + joinOffset; OutputEndpointOnline = OutputEndpointOnline + joinOffset; - //HdcpSupport = HdcpSupport + joinOffset; - //HdcpSupportCapability = HdcpSupportCapability + joinOffset; + HdcpSupportState = HdcpSupportState + joinOffset; + HdcpSupportCapability = HdcpSupportCapability + joinOffset; } } } diff --git a/PepperDashEssentials/Bridges/DmTxControllerBridge.cs b/PepperDashEssentials/Bridges/DmTxControllerBridge.cs index 26a6a939..906e189c 100644 --- a/PepperDashEssentials/Bridges/DmTxControllerBridge.cs +++ b/PepperDashEssentials/Bridges/DmTxControllerBridge.cs @@ -30,7 +30,7 @@ namespace PepperDash.Essentials.Bridges tx.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]); tx.AnyVideoInput.VideoStatus.VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus]); tx.AnyVideoInput.VideoStatus.VideoResolutionFeedback.LinkInputSig(trilist.StringInput[joinMap.CurrentInputResolution]); - //tx.HdcpSupportAllFeedback.LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportCapability]); + trilist.UShortInput[joinMap.HdcpSupportCapability].UShortValue = (ushort)tx.HdcpSupportCapability; bool hdcpTypeSimple; From f83a7aecf23c78685c8677d9c720b226a6efd437 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Wed, 14 Aug 2019 13:29:04 -0600 Subject: [PATCH 2/5] Updates eventIds for EndpointOnlineFeedabck --- .../Essentials_DM/Chassis/DmChassisController.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs b/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs index 07a43491..2cc65899 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs @@ -35,6 +35,8 @@ namespace PepperDash.Essentials.DM public Dictionary OutputNameFeedbacks { get; private set; } public Dictionary OutputVideoRouteNameFeedbacks { get; private set; } public Dictionary OutputAudioRouteNameFeedbacks { get; private set; } + + public Dictionary InputCardHdcpStateFeedbacks { get; private set; } // Need a couple Lists of generic Backplane ports @@ -573,7 +575,7 @@ namespace PepperDash.Essentials.DM //Debug.Console(2, this, "DMSwitch:{0} Input:{1} Event:{2}'", this.Name, args.Number, args.EventId.ToString()); switch (args.EventId) { - case (DMInputEventIds.OnlineFeedbackEventId): { + case (DMInputEventIds.EndpointOnlineEventId): { Debug.Console(2, this, "DMINput OnlineFeedbackEventId for input: {0}. State: {1}", args.Number, device.Inputs[args.Number].EndpointOnlineFeedback); InputEndpointOnlineFeedbacks[args.Number].FireUpdate(); break; @@ -613,7 +615,7 @@ namespace PepperDash.Essentials.DM } break; } - case DMOutputEventIds.OnlineFeedbackEventId: + case DMOutputEventIds.EndpointOnlineEventId: { Debug.Console(2, this, "Output {0} DMOutputEventIds.OnlineFeedbackEventId fired. State: {1}", args.Number, Chassis.Outputs[output].EndpointOnlineFeedback); OutputEndpointOnlineFeedbacks[output].FireUpdate(); From 5d93a5177ca1c3bfcbedbee7d1cc70aed2e87a28 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Wed, 14 Aug 2019 13:46:28 -0600 Subject: [PATCH 3/5] Start adding HDCP state feedback collection --- .../Bridges/DmChassisControllerBridge.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs b/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs index 08de8eee..39bd4115 100644 --- a/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs +++ b/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs @@ -41,7 +41,10 @@ namespace PepperDash.Essentials.Bridges { Debug.Console(2, "Creating Tx Feedbacks {0}", ioSlot); var txKey = dmChassis.TxDictionary[ioSlot]; - var txDevice = DeviceManager.GetDeviceForKey(txKey) as DmTxControllerBase; + var basicTxDevice = DeviceManager.GetDeviceForKey(txKey) as BasicDmTxControllerBase; + + var txDevice = basicTxDevice as DmTxControllerBase; + if (dmChassis.Chassis is DmMd8x8Cpu3 || dmChassis.Chassis is DmMd8x8Cpu3rps || dmChassis.Chassis is DmMd16x16Cpu3 || dmChassis.Chassis is DmMd16x16Cpu3rps || dmChassis.Chassis is DmMd32x32Cpu3 || dmChassis.Chassis is DmMd32x32Cpu3rps) @@ -56,6 +59,10 @@ namespace PepperDash.Essentials.Bridges } } + if(basicTxDevice != null && txDevice == null) + trilist.BooleanInput[joinMap.TxAdvancedIsPresent + ioSlot].BoolValue = true; + + if (txDevice != null) { bool hdcpTypeSimple; @@ -74,8 +81,6 @@ namespace PepperDash.Essentials.Bridges { var txR = txDevice as ITxRouting; - trilist.BooleanInput[joinMap.TxHdcpSupportTypeSimple + ioSlot].BoolValue = hdcpTypeSimple; - if (hdcpTypeSimple) { @@ -221,7 +226,7 @@ namespace PepperDash.Essentials.Bridges public uint VideoSyncStatus { get; set; } public uint InputEndpointOnline { get; set; } public uint OutputEndpointOnline { get; set; } - public uint TxHdcpSupportTypeSimple { get; set; } + public uint TxAdvancedIsPresent { get; set; } // indicates that there is an attached transmitter that should be bridged to be interacted with //Analog public uint OutputVideo { get; set; } @@ -245,7 +250,7 @@ namespace PepperDash.Essentials.Bridges VideoSyncStatus = 100; //101-299 InputEndpointOnline = 500; //501-699 OutputEndpointOnline = 700; //701-899 - TxHdcpSupportTypeSimple = 1000; //1001-1199 + TxAdvancedIsPresent = 1000; //1001-1199 //Analog OutputVideo = 100; //101-299 From b2dbd3c377fa2e452a3940cdd426536b656b4c7f Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Wed, 14 Aug 2019 16:48:15 -0600 Subject: [PATCH 4/5] Built HDCP Capability feedbacks for input card HDMI ports --- .../Bridges/DmChassisControllerBridge.cs | 40 ++------------- .../Chassis/DmChassisController.cs | 50 ++++++++++++++++--- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs b/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs index 39bd4115..718fa399 100644 --- a/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs +++ b/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs @@ -65,41 +65,7 @@ namespace PepperDash.Essentials.Bridges if (txDevice != null) { - bool hdcpTypeSimple; - - if (txDevice.Hardware is DmTx4kX02CBase || txDevice.Hardware is DmTx4kzX02CBase) - hdcpTypeSimple = false; - else - hdcpTypeSimple = true; - txDevice.AnyVideoInput.VideoStatus.VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline + ioSlot]); - //TxDevice.SetPortHdcpCapability((eHdcpCapabilityType)(u),)); - - trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = (ushort)txDevice.HdcpSupportCapability; - - if (txDevice is ITxRouting) - { - var txR = txDevice as ITxRouting; - - if (hdcpTypeSimple) - { - - if (txR.InputPorts[DmPortName.HdmiIn] != null) - { - var inputPort = txR.InputPorts[DmPortName.HdmiIn]; - - if (txDevice.Feedbacks["HdmiInHdcpCapability"] != null) - (txDevice.Feedbacks["HdmiInHdcpCapability"] as IntFeedback).LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState + ioSlot]); - - if (inputPort.ConnectionType == eRoutingPortConnectionType.Hdmi && inputPort.Port != null) - { - var port = inputPort.Port as EndpointHdmiInput; - - SetHdcpCapabilityAction(hdcpTypeSimple, port, joinMap.HdcpSupportState + ioSlot, trilist); - } - } - } - } } else { @@ -115,14 +81,14 @@ namespace PepperDash.Essentials.Bridges var hdmiInPortWCec = hdmiInPort as HdmiInputWithCEC; if (hdmiInPortWCec.HdcpSupportedLevel != eHdcpSupportedLevel.Unknown) + { SetHdcpCapabilityAction(true, hdmiInPortWCec, joinMap.HdcpSupportState + ioSlot, trilist); + } - //TODO: Figure out how the heck to get feedback properly. + dmChassis.InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState]); } - } } - } } else diff --git a/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs b/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs index 2cc65899..8b5761c2 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs @@ -36,7 +36,7 @@ namespace PepperDash.Essentials.DM public Dictionary OutputVideoRouteNameFeedbacks { get; private set; } public Dictionary OutputAudioRouteNameFeedbacks { get; private set; } - public Dictionary InputCardHdcpStateFeedbacks { get; private set; } + public Dictionary InputCardHdcpCapabilityFeedbacks { get; private set; } // Need a couple Lists of generic Backplane ports @@ -157,6 +157,8 @@ namespace PepperDash.Essentials.DM InputEndpointOnlineFeedbacks = new Dictionary(); OutputEndpointOnlineFeedbacks = new Dictionary(); + InputCardHdcpCapabilityFeedbacks = new Dictionary(); + for (uint x = 1; x <= Chassis.NumberOfOutputs; x++) { @@ -219,6 +221,32 @@ namespace PepperDash.Essentials.DM InputEndpointOnlineFeedbacks[tempX] = new BoolFeedback(() => { return Chassis.Inputs[tempX].EndpointOnlineFeedback; }); OutputEndpointOnlineFeedbacks[tempX] = new BoolFeedback(() => { return Chassis.Outputs[tempX].EndpointOnlineFeedback; }); + + InputCardHdcpCapabilityFeedbacks[tempX] = new IntFeedback(() => + { + var inputCard = Chassis.Inputs[tempX]; + + if (inputCard.Card is DmcHd) + { + if ((inputCard.Card as DmcHd).HdmiInput.HdcpSupportOnFeedback.BoolValue) + return 1; + else + return 0; + } + else if (inputCard.Card is DmcHdDsp) + { + if ((inputCard.Card as DmcHdDsp).HdmiInput.HdcpSupportOnFeedback.BoolValue) + return 1; + else + return 0; + } + else if (inputCard.Card is Dmc4kHdBase) + { + return (int)(inputCard.Card as Dmc4kHdBase).HdmiInput.HdcpReceiveCapability; + } + else + return 0; + }); } } @@ -576,20 +604,26 @@ namespace PepperDash.Essentials.DM switch (args.EventId) { case (DMInputEventIds.EndpointOnlineEventId): { - Debug.Console(2, this, "DMINput OnlineFeedbackEventId for input: {0}. State: {1}", args.Number, device.Inputs[args.Number].EndpointOnlineFeedback); - InputEndpointOnlineFeedbacks[args.Number].FireUpdate(); - break; + Debug.Console(2, this, "DMINput OnlineFeedbackEventId for input: {0}. State: {1}", args.Number, device.Inputs[args.Number].EndpointOnlineFeedback); + InputEndpointOnlineFeedbacks[args.Number].FireUpdate(); + break; } case (DMInputEventIds.VideoDetectedEventId): { - Debug.Console(2, this, "DM Input {0} VideoDetectedEventId", args.Number); - VideoInputSyncFeedbacks[args.Number].FireUpdate(); - break; + Debug.Console(2, this, "DM Input {0} VideoDetectedEventId", args.Number); + VideoInputSyncFeedbacks[args.Number].FireUpdate(); + break; } case (DMInputEventIds.InputNameEventId): { Debug.Console(2, this, "DM Input {0} NameFeedbackEventId", args.Number); InputNameFeedbacks[args.Number].FireUpdate(); break; } + case DMInputEventIds.HdcpCapabilityFeedbackEventId: + { + Debug.Console(2, this, "DM Input {0} HdcpCapabilityFeedbackEventId", args.Number); + InputCardHdcpCapabilityFeedbacks[args.Number].FireUpdate(); + break; + } default: { Debug.Console(2, this, "DMInputChange fired for Input {0} with Unhandled EventId: {1}", args.Number, args.EventId); @@ -621,7 +655,7 @@ namespace PepperDash.Essentials.DM OutputEndpointOnlineFeedbacks[output].FireUpdate(); break; } - case DMInputEventIds.OnlineFeedbackEventId: + case DMOutputEventIds.OnlineFeedbackEventId: { Debug.Console(2, this, "Output {0} DMInputEventIds.OnlineFeedbackEventId fired. State: {1}", args.Number, Chassis.Outputs[output].EndpointOnlineFeedback); OutputEndpointOnlineFeedbacks[output].FireUpdate(); From 7eccc82541768abd5adffd4bc2c3e146d93247d8 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Wed, 14 Aug 2019 17:16:17 -0600 Subject: [PATCH 5/5] Adds HDCP Capability type values --- .../Bridges/DmChassisControllerBridge.cs | 4 +++- .../Essentials_DM/Chassis/DmChassisController.cs | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs b/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs index 718fa399..17c80474 100644 --- a/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs +++ b/PepperDashEssentials/Bridges/DmChassisControllerBridge.cs @@ -85,7 +85,9 @@ namespace PepperDash.Essentials.Bridges SetHdcpCapabilityAction(true, hdmiInPortWCec, joinMap.HdcpSupportState + ioSlot, trilist); } - dmChassis.InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState]); + dmChassis.InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState + ioSlot]); + + trilist.UShortInput[joinMap.HdcpSupportCapability + ioSlot].UShortValue = (ushort)dmChassis.InputCardHdcpCapabilityTypes[ioSlot]; } } } diff --git a/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs b/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs index 8b5761c2..eb3016d4 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs @@ -37,6 +37,8 @@ namespace PepperDash.Essentials.DM public Dictionary OutputAudioRouteNameFeedbacks { get; private set; } public Dictionary InputCardHdcpCapabilityFeedbacks { get; private set; } + + public Dictionary InputCardHdcpCapabilityTypes { get; private set; } // Need a couple Lists of generic Backplane ports @@ -158,6 +160,7 @@ namespace PepperDash.Essentials.DM OutputEndpointOnlineFeedbacks = new Dictionary(); InputCardHdcpCapabilityFeedbacks = new Dictionary(); + InputCardHdcpCapabilityTypes = new Dictionary(); for (uint x = 1; x <= Chassis.NumberOfOutputs; x++) @@ -228,6 +231,8 @@ namespace PepperDash.Essentials.DM if (inputCard.Card is DmcHd) { + InputCardHdcpCapabilityTypes[tempX] = eHdcpCapabilityType.HdcpAutoSupport; + if ((inputCard.Card as DmcHd).HdmiInput.HdcpSupportOnFeedback.BoolValue) return 1; else @@ -235,6 +240,8 @@ namespace PepperDash.Essentials.DM } else if (inputCard.Card is DmcHdDsp) { + InputCardHdcpCapabilityTypes[tempX] = eHdcpCapabilityType.HdcpAutoSupport; + if ((inputCard.Card as DmcHdDsp).HdmiInput.HdcpSupportOnFeedback.BoolValue) return 1; else @@ -242,6 +249,8 @@ namespace PepperDash.Essentials.DM } else if (inputCard.Card is Dmc4kHdBase) { + InputCardHdcpCapabilityTypes[tempX] = eHdcpCapabilityType.Hdcp2_2Support; + return (int)(inputCard.Card as Dmc4kHdBase).HdmiInput.HdcpReceiveCapability; } else