mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-14 12:15:01 +00:00
Merge pull request #317 from PepperDash/hotfix/refactor-dm-bridging
Refactor DM Chassis Bridging
This commit is contained in:
@@ -64,7 +64,7 @@
|
|||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Crestron.SimplSharpPro.Gateways, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
<Reference Include="Crestron.SimplSharpPro.Gateways, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Gateways.dll</HintPath>
|
<HintPath>..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Gateways.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Crestron.SimplSharpPro.GeneralIO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
<Reference Include="Crestron.SimplSharpPro.GeneralIO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1099c178b3b54c3b, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharpPro;
|
using Crestron.SimplSharpPro;
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
@@ -46,7 +47,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
public BoolFeedback EnableAudioBreakawayFeedback { get; private set; }
|
public BoolFeedback EnableAudioBreakawayFeedback { get; private set; }
|
||||||
public BoolFeedback EnableUsbBreakawayFeedback { get; private set; }
|
public BoolFeedback EnableUsbBreakawayFeedback { get; private set; }
|
||||||
|
|
||||||
public Dictionary<uint, IntFeedback> InputCardHdcpCapabilityFeedbacks { get; private set; }
|
public Dictionary<uint, IntFeedback> InputCardHdcpStateFeedbacks { get; private set; }
|
||||||
|
|
||||||
public Dictionary<uint, eHdcpCapabilityType> InputCardHdcpCapabilityTypes { get; private set; }
|
public Dictionary<uint, eHdcpCapabilityType> InputCardHdcpCapabilityTypes { get; private set; }
|
||||||
|
|
||||||
@@ -218,7 +219,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
EnableUsbBreakawayFeedback =
|
EnableUsbBreakawayFeedback =
|
||||||
new BoolFeedback(() => (Chassis as DmMDMnxn).EnableUSBBreakawayFeedback.BoolValue);
|
new BoolFeedback(() => (Chassis as DmMDMnxn).EnableUSBBreakawayFeedback.BoolValue);
|
||||||
|
|
||||||
InputCardHdcpCapabilityFeedbacks = new Dictionary<uint, IntFeedback>();
|
InputCardHdcpStateFeedbacks = new Dictionary<uint, IntFeedback>();
|
||||||
InputCardHdcpCapabilityTypes = new Dictionary<uint, eHdcpCapabilityType>();
|
InputCardHdcpCapabilityTypes = new Dictionary<uint, eHdcpCapabilityType>();
|
||||||
|
|
||||||
for (uint x = 1; x <= Chassis.NumberOfOutputs; x++)
|
for (uint x = 1; x <= Chassis.NumberOfOutputs; x++)
|
||||||
@@ -328,7 +329,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
InputEndpointOnlineFeedbacks[tempX] = new BoolFeedback(() => { return Chassis.Inputs[tempX].EndpointOnlineFeedback; });
|
InputEndpointOnlineFeedbacks[tempX] = new BoolFeedback(() => { return Chassis.Inputs[tempX].EndpointOnlineFeedback; });
|
||||||
|
|
||||||
InputCardHdcpCapabilityFeedbacks[tempX] = new IntFeedback(() => {
|
InputCardHdcpStateFeedbacks[tempX] = new IntFeedback(() => {
|
||||||
var inputCard = Chassis.Inputs[tempX];
|
var inputCard = Chassis.Inputs[tempX];
|
||||||
|
|
||||||
if (inputCard.Card is DmcHd)
|
if (inputCard.Card is DmcHd)
|
||||||
@@ -838,10 +839,10 @@ namespace PepperDash.Essentials.DM
|
|||||||
case DMInputEventIds.HdcpCapabilityFeedbackEventId:
|
case DMInputEventIds.HdcpCapabilityFeedbackEventId:
|
||||||
{
|
{
|
||||||
Debug.Console(2, this, "DM Input {0} HdcpCapabilityFeedbackEventId", args.Number);
|
Debug.Console(2, this, "DM Input {0} HdcpCapabilityFeedbackEventId", args.Number);
|
||||||
if (InputCardHdcpCapabilityFeedbacks[args.Number] != null)
|
if (InputCardHdcpStateFeedbacks[args.Number] != null)
|
||||||
InputCardHdcpCapabilityFeedbacks[args.Number].FireUpdate();
|
InputCardHdcpStateFeedbacks[args.Number].FireUpdate();
|
||||||
else
|
else
|
||||||
Debug.Console(1, this, "No index of {0} found in InputCardHdcpCapabilityFeedbacks");
|
Debug.Console(1, this, "No index of {0} found in InputCardHdcpStateFeedbacks");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -1105,24 +1106,281 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||||
{
|
{
|
||||||
var joinMap = new DmChassisControllerJoinMap(joinStart);
|
var joinMap = GetJoinMap(joinStart, joinMapKey, bridge);
|
||||||
|
|
||||||
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(joinMapSerialized))
|
|
||||||
joinMap = JsonConvert.DeserializeObject<DmChassisControllerJoinMap>(joinMapSerialized);
|
|
||||||
|
|
||||||
if (bridge != null)
|
|
||||||
{
|
|
||||||
bridge.AddJoinMap(Key, joinMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||||
|
|
||||||
|
LinkChassisToApi(trilist, joinMap);
|
||||||
|
|
||||||
|
// Link up inputs & outputs
|
||||||
|
for (uint i = 1; i <= Chassis.NumberOfOutputs; i++)
|
||||||
|
{
|
||||||
|
var ioSlot = i;
|
||||||
|
var ioSlotJoin = ioSlot - 1;
|
||||||
|
|
||||||
|
LinkRoutingJoinsToApi(trilist, joinMap, ioSlotJoin, ioSlot);
|
||||||
|
|
||||||
|
if (TxDictionary.ContainsKey(ioSlot))
|
||||||
|
{
|
||||||
|
LinkTxToApi(trilist, ioSlot, joinMap, ioSlotJoin);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LinkHdmiInputToApi(trilist, ioSlot, joinMap, ioSlotJoin);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RxDictionary.ContainsKey(ioSlot))
|
||||||
|
{
|
||||||
|
LinkRxToApi(trilist, ioSlot, joinMap, ioSlotJoin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LinkHdmiInputToApi(BasicTriList trilist, uint ioSlot, DmChassisControllerJoinMap joinMap, uint ioSlotJoin)
|
||||||
|
{
|
||||||
|
VideoInputSyncFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus.JoinNumber + ioSlotJoin]);
|
||||||
|
|
||||||
|
var inputPort = InputPorts[string.Format("inputCard{0}--hdmiIn", ioSlot)];
|
||||||
|
if (inputPort == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Console(1, "Port value for input card {0} is set", ioSlot);
|
||||||
|
var port = inputPort.Port;
|
||||||
|
|
||||||
|
if (port == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!(port is HdmiInputWithCEC))
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, "HDMI Input port on card {0} does not support HDCP settings.", ioSlot);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Console(1, "Port is HdmiInputWithCec");
|
||||||
|
|
||||||
|
var hdmiInPortWCec = port as HdmiInputWithCEC;
|
||||||
|
|
||||||
|
|
||||||
|
SetHdcpStateAction(true, hdmiInPortWCec, joinMap.HdcpSupportState.JoinNumber + ioSlotJoin, trilist);
|
||||||
|
|
||||||
|
|
||||||
|
InputCardHdcpStateFeedbacks[ioSlot].LinkInputSig(
|
||||||
|
trilist.UShortInput[joinMap.HdcpSupportState.JoinNumber + ioSlotJoin]);
|
||||||
|
|
||||||
|
if (InputCardHdcpCapabilityTypes.ContainsKey(ioSlot))
|
||||||
|
{
|
||||||
|
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber + ioSlotJoin].UShortValue =
|
||||||
|
(ushort)InputCardHdcpCapabilityTypes[ioSlot];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber + ioSlotJoin].UShortValue = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LinkRxToApi(BasicTriList trilist, uint ioSlot, DmChassisControllerJoinMap joinMap, uint ioSlotJoin)
|
||||||
|
{
|
||||||
|
Debug.Console(2, "Creating Rx Feedbacks {0}", ioSlot);
|
||||||
|
var rxKey = RxDictionary[ioSlot];
|
||||||
|
var rxDevice = DeviceManager.GetDeviceForKey(rxKey) as DmRmcControllerBase;
|
||||||
|
var hdBaseTDevice = DeviceManager.GetDeviceForKey(rxKey) as DmHdBaseTControllerBase;
|
||||||
|
if (Chassis is DmMd8x8Cpu3 || Chassis is DmMd8x8Cpu3rps
|
||||||
|
|| Chassis is DmMd16x16Cpu3 || Chassis is DmMd16x16Cpu3rps
|
||||||
|
|| Chassis is DmMd32x32Cpu3 || Chassis is DmMd32x32Cpu3rps || hdBaseTDevice != null)
|
||||||
|
{
|
||||||
|
OutputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(
|
||||||
|
trilist.BooleanInput[joinMap.OutputEndpointOnline.JoinNumber + ioSlotJoin]);
|
||||||
|
}
|
||||||
|
else if (rxDevice != null)
|
||||||
|
{
|
||||||
|
rxDevice.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.OutputEndpointOnline.JoinNumber + ioSlotJoin]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LinkTxToApi(BasicTriList trilist, uint ioSlot, DmChassisControllerJoinMap joinMap, uint ioSlotJoin)
|
||||||
|
{
|
||||||
|
Debug.Console(1, "Setting up actions and feedbacks on input card {0}", ioSlot);
|
||||||
|
VideoInputSyncFeedbacks[ioSlot].LinkInputSig(
|
||||||
|
trilist.BooleanInput[joinMap.VideoSyncStatus.JoinNumber + ioSlotJoin]);
|
||||||
|
|
||||||
|
Debug.Console(2, "Creating Tx Feedbacks {0}", ioSlot);
|
||||||
|
var txKey = TxDictionary[ioSlot];
|
||||||
|
var txDevice = DeviceManager.GetDeviceForKey(txKey) as BasicDmTxControllerBase;
|
||||||
|
|
||||||
|
if (txDevice == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LinkTxOnlineFeedbackToApi(trilist, ioSlot, joinMap, ioSlotJoin, txDevice);
|
||||||
|
|
||||||
|
LinkBasicTxToApi(trilist, joinMap, ioSlot, ioSlotJoin, txDevice);
|
||||||
|
|
||||||
|
LinkAdvancedTxToApi(trilist, joinMap, ioSlot, ioSlotJoin, txDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LinkBasicTxToApi(BasicTriList trilist, DmChassisControllerJoinMap joinMap, uint ioSlot,
|
||||||
|
uint ioSlotJoin, BasicDmTxControllerBase basicTransmitter)
|
||||||
|
{
|
||||||
|
var advTx = basicTransmitter as DmTxControllerBase;
|
||||||
|
|
||||||
|
if (advTx != null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var inputPort = InputPorts[string.Format("inputCard{0}--dmIn", ioSlot)];
|
||||||
|
|
||||||
|
if (inputPort == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var port = inputPort.Port;
|
||||||
|
|
||||||
|
if (!(port is DMInputPortWithCec))
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, "DM Input port on card {0} does not support HDCP settings.", ioSlot);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Debug.Console(1, "Port is DMInputPortWithCec");
|
||||||
|
|
||||||
|
var dmInPortWCec = port as DMInputPortWithCec;
|
||||||
|
|
||||||
|
bool supportsHdcp2;
|
||||||
|
|
||||||
|
//added in case the InputSlotSupportsHdcp2 section isn't included in the config, or this slot is left out.
|
||||||
|
//if the key isn't in the dictionary, supportsHdcp2 will be false
|
||||||
|
|
||||||
|
if(!PropertiesConfig.InputSlotSupportsHdcp2.TryGetValue(ioSlot, out supportsHdcp2))
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Warning,
|
||||||
|
"Input Slot Supports HDCP2 setting not found for slot {0}. Setting to false. Program may not function as intended.",
|
||||||
|
ioSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetHdcpStateAction(supportsHdcp2, dmInPortWCec,
|
||||||
|
joinMap.HdcpSupportState.JoinNumber + ioSlotJoin, trilist);
|
||||||
|
|
||||||
|
InputCardHdcpStateFeedbacks[ioSlot].LinkInputSig(
|
||||||
|
trilist.UShortInput[joinMap.HdcpSupportState.JoinNumber + ioSlotJoin]);
|
||||||
|
|
||||||
|
if (InputCardHdcpCapabilityTypes.ContainsKey(ioSlot))
|
||||||
|
{
|
||||||
|
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber + ioSlotJoin].UShortValue =
|
||||||
|
(ushort) InputCardHdcpCapabilityTypes[ioSlot];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber + ioSlotJoin].UShortValue = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LinkAdvancedTxToApi(BasicTriList trilist, DmChassisControllerJoinMap joinMap,
|
||||||
|
uint ioSlot, uint ioSlotJoin, BasicDmTxControllerBase basicTransmitter)
|
||||||
|
{
|
||||||
|
var transmitter = basicTransmitter as DmTxControllerBase;
|
||||||
|
if (transmitter == null) return;
|
||||||
|
|
||||||
|
trilist.BooleanInput[joinMap.TxAdvancedIsPresent.JoinNumber + ioSlotJoin].BoolValue = true;
|
||||||
|
|
||||||
|
transmitter.AnyVideoInput.VideoStatus.VideoSyncFeedback.LinkInputSig(
|
||||||
|
trilist.BooleanInput[joinMap.VideoSyncStatus.JoinNumber + ioSlotJoin]);
|
||||||
|
|
||||||
|
var txRoutingInputs = transmitter as IRoutingInputs;
|
||||||
|
|
||||||
|
if (txRoutingInputs == null) return;
|
||||||
|
|
||||||
|
var inputPorts = txRoutingInputs.InputPorts.Where((p) => p.Port is EndpointHdmiInput || p.Port is EndpointDisplayPortInput).ToList();
|
||||||
|
|
||||||
|
if (inputPorts.Count == 0)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "No HDCP-capable input ports found on transmitter for slot {0}", ioSlot);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool supportsHdcp2;
|
||||||
|
|
||||||
|
if (!PropertiesConfig.InputSlotSupportsHdcp2.TryGetValue(ioSlot, out supportsHdcp2))
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Warning,
|
||||||
|
"Input Slot Supports HDCP2 setting not found for slot {0}. Setting to false. Program may not function as intended.",
|
||||||
|
ioSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetHdcpStateAction(supportsHdcp2, inputPorts, joinMap.HdcpSupportState.JoinNumber + ioSlotJoin, trilist);
|
||||||
|
|
||||||
|
if (transmitter.HdcpStateFeedback != null)
|
||||||
|
{
|
||||||
|
transmitter.HdcpStateFeedback.LinkInputSig(
|
||||||
|
trilist.UShortInput[joinMap.HdcpSupportState.JoinNumber + ioSlotJoin]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "Transmitter Hdcp Feedback null. Linking to card's feedback");
|
||||||
|
InputCardHdcpStateFeedbacks[ioSlot].LinkInputSig(
|
||||||
|
trilist.UShortInput[joinMap.HdcpSupportState.JoinNumber + ioSlotJoin]);
|
||||||
|
}
|
||||||
|
|
||||||
|
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber + ioSlotJoin].UShortValue =
|
||||||
|
(ushort) transmitter.HdcpSupportCapability;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LinkTxOnlineFeedbackToApi(BasicTriList trilist, uint ioSlot, DmChassisControllerJoinMap joinMap,
|
||||||
|
uint ioSlotJoin, BasicDmTxControllerBase txDevice)
|
||||||
|
{
|
||||||
|
var advancedTxDevice = txDevice as DmTxControllerBase;
|
||||||
|
|
||||||
|
if ((Chassis is DmMd8x8Cpu3 || Chassis is DmMd8x8Cpu3rps
|
||||||
|
|| Chassis is DmMd16x16Cpu3 || Chassis is DmMd16x16Cpu3rps
|
||||||
|
|| Chassis is DmMd32x32Cpu3 || Chassis is DmMd32x32Cpu3rps) ||
|
||||||
|
advancedTxDevice == null)
|
||||||
|
{
|
||||||
|
Debug.Console(2, "Linking Tx Online Feedback from Input Card {0}", ioSlot);
|
||||||
|
InputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(
|
||||||
|
trilist.BooleanInput[joinMap.InputEndpointOnline.JoinNumber + ioSlotJoin]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Console(2, "Linking Tx Online Feedback from Advanced Transmitter at input {0}", ioSlot);
|
||||||
|
|
||||||
|
advancedTxDevice.IsOnline.LinkInputSig(
|
||||||
|
trilist.BooleanInput[joinMap.InputEndpointOnline.JoinNumber + ioSlotJoin]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LinkRoutingJoinsToApi(BasicTriList trilist, DmChassisControllerJoinMap joinMap, uint ioSlotJoin,
|
||||||
|
uint ioSlot)
|
||||||
|
{
|
||||||
|
// Routing Control
|
||||||
|
trilist.SetUShortSigAction(joinMap.OutputVideo.JoinNumber + ioSlotJoin,
|
||||||
|
o => ExecuteSwitch(o, ioSlot, eRoutingSignalType.Video));
|
||||||
|
trilist.SetUShortSigAction(joinMap.OutputAudio.JoinNumber + ioSlotJoin,
|
||||||
|
o => ExecuteSwitch(o, ioSlot, eRoutingSignalType.Audio));
|
||||||
|
trilist.SetUShortSigAction(joinMap.OutputUsb.JoinNumber + ioSlotJoin,
|
||||||
|
o => ExecuteSwitch(o, ioSlot, eRoutingSignalType.UsbOutput));
|
||||||
|
trilist.SetUShortSigAction(joinMap.InputUsb.JoinNumber + ioSlotJoin,
|
||||||
|
o => ExecuteSwitch(o, ioSlot, eRoutingSignalType.UsbInput));
|
||||||
|
|
||||||
|
//Routing Feedbacks
|
||||||
|
VideoOutputFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputVideo.JoinNumber + ioSlotJoin]);
|
||||||
|
AudioOutputFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputAudio.JoinNumber + ioSlotJoin]);
|
||||||
|
UsbOutputRoutedToFeebacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputUsb.JoinNumber + ioSlotJoin]);
|
||||||
|
UsbInputRoutedToFeebacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.InputUsb.JoinNumber + ioSlotJoin]);
|
||||||
|
|
||||||
|
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputNames.JoinNumber + ioSlotJoin]);
|
||||||
|
InputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.InputNames.JoinNumber + ioSlotJoin]);
|
||||||
|
OutputVideoRouteNameFeedbacks[ioSlot].LinkInputSig(
|
||||||
|
trilist.StringInput[joinMap.OutputCurrentVideoInputNames.JoinNumber + ioSlotJoin]);
|
||||||
|
OutputAudioRouteNameFeedbacks[ioSlot].LinkInputSig(
|
||||||
|
trilist.StringInput[joinMap.OutputCurrentAudioInputNames.JoinNumber + ioSlotJoin]);
|
||||||
|
|
||||||
|
OutputDisabledByHdcpFeedbacks[ioSlot].LinkInputSig(
|
||||||
|
trilist.BooleanInput[joinMap.OutputDisabledByHdcp.JoinNumber + ioSlotJoin]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LinkChassisToApi(BasicTriList trilist, DmChassisControllerJoinMap joinMap)
|
||||||
|
{
|
||||||
var chassis = Chassis as DmMDMnxn;
|
var chassis = Chassis as DmMDMnxn;
|
||||||
|
|
||||||
IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
|
||||||
@@ -1130,12 +1388,17 @@ namespace PepperDash.Essentials.DM
|
|||||||
trilist.SetUShortSigAction(joinMap.SystemId.JoinNumber, o =>
|
trilist.SetUShortSigAction(joinMap.SystemId.JoinNumber, o =>
|
||||||
{
|
{
|
||||||
if (chassis != null)
|
if (chassis != null)
|
||||||
|
{
|
||||||
chassis.SystemId.UShortValue = o;
|
chassis.SystemId.UShortValue = o;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
trilist.SetSigTrueAction(joinMap.SystemId.JoinNumber, () =>
|
trilist.SetSigTrueAction(joinMap.SystemId.JoinNumber, () =>
|
||||||
{
|
{
|
||||||
if (chassis != null) chassis.ApplySystemId();
|
if (chassis != null)
|
||||||
|
{
|
||||||
|
chassis.ApplySystemId();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
SystemIdFeebdack.LinkInputSig(trilist.UShortInput[joinMap.SystemId.JoinNumber]);
|
SystemIdFeebdack.LinkInputSig(trilist.UShortInput[joinMap.SystemId.JoinNumber]);
|
||||||
@@ -1146,177 +1409,44 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
trilist.OnlineStatusChange += (o, a) =>
|
trilist.OnlineStatusChange += (o, a) =>
|
||||||
{
|
{
|
||||||
if (!a.DeviceOnLine) return;
|
if (!a.DeviceOnLine)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
EnableAudioBreakawayFeedback.FireUpdate();
|
EnableAudioBreakawayFeedback.FireUpdate();
|
||||||
EnableUsbBreakawayFeedback.FireUpdate();
|
EnableUsbBreakawayFeedback.FireUpdate();
|
||||||
SystemIdBusyFeedback.FireUpdate();
|
SystemIdBusyFeedback.FireUpdate();
|
||||||
SystemIdFeebdack.FireUpdate();
|
SystemIdFeebdack.FireUpdate();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Link up outputs
|
|
||||||
for (uint i = 1; i <= Chassis.NumberOfOutputs; i++)
|
|
||||||
{
|
|
||||||
var ioSlot = i;
|
|
||||||
var ioSlotJoin = ioSlot - 1;
|
|
||||||
|
|
||||||
// Control
|
|
||||||
trilist.SetUShortSigAction(joinMap.OutputVideo.JoinNumber + ioSlotJoin, o => ExecuteSwitch(o, ioSlot, eRoutingSignalType.Video));
|
|
||||||
trilist.SetUShortSigAction(joinMap.OutputAudio.JoinNumber + ioSlotJoin, o => ExecuteSwitch(o, ioSlot, eRoutingSignalType.Audio));
|
|
||||||
trilist.SetUShortSigAction(joinMap.OutputUsb.JoinNumber + ioSlotJoin, o => ExecuteSwitch(o, ioSlot, eRoutingSignalType.UsbOutput));
|
|
||||||
trilist.SetUShortSigAction(joinMap.InputUsb.JoinNumber + ioSlotJoin, o => ExecuteSwitch(o, ioSlot, eRoutingSignalType.UsbInput));
|
|
||||||
|
|
||||||
if (TxDictionary.ContainsKey(ioSlot))
|
|
||||||
{
|
|
||||||
Debug.Console(2, "Creating Tx Feedbacks {0}", ioSlot);
|
|
||||||
var txKey = TxDictionary[ioSlot];
|
|
||||||
var basicTxDevice = DeviceManager.GetDeviceForKey(txKey) as BasicDmTxControllerBase;
|
|
||||||
|
|
||||||
var advancedTxDevice = basicTxDevice as DmTxControllerBase;
|
|
||||||
|
|
||||||
if (Chassis is DmMd8x8Cpu3 || Chassis is DmMd8x8Cpu3rps
|
|
||||||
|| Chassis is DmMd16x16Cpu3 || Chassis is DmMd16x16Cpu3rps
|
|
||||||
|| Chassis is DmMd32x32Cpu3 || Chassis is DmMd32x32Cpu3rps)
|
|
||||||
{
|
|
||||||
InputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline.JoinNumber + ioSlotJoin]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (advancedTxDevice != null)
|
|
||||||
{
|
|
||||||
advancedTxDevice.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline.JoinNumber + ioSlotJoin]);
|
|
||||||
Debug.Console(2, "Linking Tx Online Feedback from Advanced Transmitter at input {0}", ioSlot);
|
|
||||||
}
|
|
||||||
else if (InputEndpointOnlineFeedbacks[ioSlot] != null)
|
|
||||||
{
|
|
||||||
Debug.Console(2, "Linking Tx Online Feedback from Input Card {0}", ioSlot);
|
|
||||||
InputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.InputEndpointOnline.JoinNumber + ioSlotJoin]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (basicTxDevice != null && advancedTxDevice == null)
|
|
||||||
trilist.BooleanInput[joinMap.TxAdvancedIsPresent.JoinNumber + ioSlotJoin].BoolValue = true;
|
|
||||||
|
|
||||||
if (advancedTxDevice != null)
|
|
||||||
{
|
|
||||||
advancedTxDevice.AnyVideoInput.VideoStatus.VideoSyncFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus.JoinNumber + ioSlotJoin]);
|
|
||||||
}
|
|
||||||
else if (advancedTxDevice == null || basicTxDevice != null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Setting up actions and feedbacks on input card {0}", ioSlot);
|
|
||||||
VideoInputSyncFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus.JoinNumber + ioSlotJoin]);
|
|
||||||
|
|
||||||
var inputPort = InputPorts[string.Format("inputCard{0}--hdmiIn", ioSlot)];
|
|
||||||
if (inputPort != null)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Port value for input card {0} is set", ioSlot);
|
|
||||||
var port = inputPort.Port;
|
|
||||||
|
|
||||||
if (port != null)
|
|
||||||
{
|
|
||||||
if (port is HdmiInputWithCEC)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Port is HdmiInputWithCec");
|
|
||||||
|
|
||||||
var hdmiInPortWCec = port as HdmiInputWithCEC;
|
|
||||||
|
|
||||||
if (hdmiInPortWCec.HdcpSupportedLevel != eHdcpSupportedLevel.Unknown)
|
|
||||||
{
|
|
||||||
SetHdcpStateAction(true, hdmiInPortWCec, joinMap.HdcpSupportState.JoinNumber + ioSlotJoin, trilist);
|
|
||||||
}
|
|
||||||
|
|
||||||
InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState.JoinNumber + ioSlotJoin]);
|
|
||||||
|
|
||||||
if (InputCardHdcpCapabilityTypes.ContainsKey(ioSlot))
|
|
||||||
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber + ioSlotJoin].UShortValue = (ushort)InputCardHdcpCapabilityTypes[ioSlot];
|
|
||||||
else
|
|
||||||
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber + ioSlotJoin].UShortValue = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
inputPort = InputPorts[string.Format("inputCard{0}--dmIn", ioSlot)];
|
|
||||||
|
|
||||||
if (inputPort != null)
|
|
||||||
{
|
|
||||||
var port = inputPort.Port;
|
|
||||||
|
|
||||||
if (port is DMInputPortWithCec)
|
|
||||||
{
|
|
||||||
Debug.Console(1, "Port is DMInputPortWithCec");
|
|
||||||
|
|
||||||
var dmInPortWCec = port as DMInputPortWithCec;
|
|
||||||
|
|
||||||
if (dmInPortWCec != null)
|
|
||||||
{
|
|
||||||
SetHdcpStateAction(PropertiesConfig.InputSlotSupportsHdcp2[ioSlot], dmInPortWCec, joinMap.HdcpSupportState.JoinNumber + ioSlotJoin, trilist);
|
|
||||||
}
|
|
||||||
|
|
||||||
InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState.JoinNumber + ioSlotJoin]);
|
|
||||||
|
|
||||||
if (InputCardHdcpCapabilityTypes.ContainsKey(ioSlot))
|
|
||||||
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber + ioSlotJoin].UShortValue = (ushort)InputCardHdcpCapabilityTypes[ioSlot];
|
|
||||||
else
|
|
||||||
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber + ioSlotJoin].UShortValue = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
VideoInputSyncFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.VideoSyncStatus.JoinNumber + ioSlotJoin]);
|
|
||||||
|
|
||||||
var inputPort = InputPorts[string.Format("inputCard{0}--hdmiIn", ioSlot)];
|
|
||||||
if (inputPort != null)
|
|
||||||
{
|
|
||||||
var hdmiPort = inputPort.Port as EndpointHdmiInput;
|
|
||||||
|
|
||||||
if (hdmiPort != null)
|
|
||||||
{
|
|
||||||
SetHdcpStateAction(true, hdmiPort, joinMap.HdcpSupportState.JoinNumber + ioSlotJoin, trilist);
|
|
||||||
InputCardHdcpCapabilityFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.HdcpSupportState.JoinNumber + ioSlotJoin]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RxDictionary.ContainsKey(ioSlot))
|
|
||||||
{
|
|
||||||
Debug.Console(2, "Creating Rx Feedbacks {0}", ioSlot);
|
|
||||||
var rxKey = RxDictionary[ioSlot];
|
|
||||||
var rxDevice = DeviceManager.GetDeviceForKey(rxKey) as DmRmcControllerBase;
|
|
||||||
var hdBaseTDevice = DeviceManager.GetDeviceForKey(rxKey) as DmHdBaseTControllerBase;
|
|
||||||
if (Chassis is DmMd8x8Cpu3 || Chassis is DmMd8x8Cpu3rps
|
|
||||||
|| Chassis is DmMd16x16Cpu3 || Chassis is DmMd16x16Cpu3rps
|
|
||||||
|| Chassis is DmMd32x32Cpu3 || Chassis is DmMd32x32Cpu3rps || hdBaseTDevice != null)
|
|
||||||
{
|
|
||||||
OutputEndpointOnlineFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.OutputEndpointOnline.JoinNumber + ioSlotJoin]);
|
|
||||||
}
|
|
||||||
else if (rxDevice != null)
|
|
||||||
{
|
|
||||||
rxDevice.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.OutputEndpointOnline.JoinNumber + ioSlotJoin]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Feedback
|
|
||||||
VideoOutputFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputVideo.JoinNumber + ioSlotJoin]);
|
|
||||||
AudioOutputFeedbacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputAudio.JoinNumber + ioSlotJoin]);
|
|
||||||
UsbOutputRoutedToFeebacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.OutputUsb.JoinNumber + ioSlotJoin]);
|
|
||||||
UsbInputRoutedToFeebacks[ioSlot].LinkInputSig(trilist.UShortInput[joinMap.InputUsb.JoinNumber + ioSlotJoin]);
|
|
||||||
|
|
||||||
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputNames.JoinNumber + ioSlotJoin]);
|
|
||||||
InputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.InputNames.JoinNumber + ioSlotJoin]);
|
|
||||||
OutputVideoRouteNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputCurrentVideoInputNames.JoinNumber + ioSlotJoin]);
|
|
||||||
OutputAudioRouteNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputCurrentAudioInputNames.JoinNumber + ioSlotJoin]);
|
|
||||||
|
|
||||||
OutputDisabledByHdcpFeedbacks[ioSlot].LinkInputSig(trilist.BooleanInput[joinMap.OutputDisabledByHdcp.JoinNumber + ioSlotJoin]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetHdcpStateAction(bool hdcpTypeSimple, HdmiInputWithCEC port, uint join, BasicTriList trilist)
|
private DmChassisControllerJoinMap GetJoinMap(uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||||
{
|
{
|
||||||
if (hdcpTypeSimple)
|
var joinMap = new DmChassisControllerJoinMap(joinStart);
|
||||||
|
|
||||||
|
var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(joinMapSerialized))
|
||||||
|
{
|
||||||
|
joinMap = JsonConvert.DeserializeObject<DmChassisControllerJoinMap>(joinMapSerialized);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bridge != null)
|
||||||
|
{
|
||||||
|
bridge.AddJoinMap(Key, joinMap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Console(0, this,
|
||||||
|
"Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
||||||
|
}
|
||||||
|
return joinMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetHdcpStateAction(bool supportsHdcp2, HdmiInputWithCEC port, uint join, BasicTriList trilist)
|
||||||
|
{
|
||||||
|
if (!supportsHdcp2)
|
||||||
{
|
{
|
||||||
trilist.SetUShortSigAction(join,
|
trilist.SetUShortSigAction(join,
|
||||||
s =>
|
s =>
|
||||||
@@ -1341,9 +1471,9 @@ namespace PepperDash.Essentials.DM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetHdcpStateAction(bool hdcpTypeSimple, EndpointHdmiInput port, uint join, BasicTriList trilist)
|
private void SetHdcpStateAction(bool supportsHdcp2, EndpointHdmiInput port, uint join, BasicTriList trilist)
|
||||||
{
|
{
|
||||||
if (hdcpTypeSimple)
|
if (!supportsHdcp2)
|
||||||
{
|
{
|
||||||
trilist.SetUShortSigAction(join,
|
trilist.SetUShortSigAction(join,
|
||||||
s =>
|
s =>
|
||||||
@@ -1368,6 +1498,38 @@ namespace PepperDash.Essentials.DM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetHdcpStateAction(bool supportsHdcp2, List<RoutingInputPort> ports, uint join,
|
||||||
|
BasicTriList triList)
|
||||||
|
{
|
||||||
|
if (!supportsHdcp2)
|
||||||
|
{
|
||||||
|
triList.SetUShortSigAction(join, a =>
|
||||||
|
{
|
||||||
|
foreach (var tempPort in ports.Select(port => port.Port).OfType<EndpointHdmiInput>())
|
||||||
|
{
|
||||||
|
if (a == 0)
|
||||||
|
{
|
||||||
|
tempPort.HdcpSupportOff();
|
||||||
|
}
|
||||||
|
else if (a > 0)
|
||||||
|
{
|
||||||
|
tempPort.HdcpSupportOn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
triList.SetUShortSigAction(join, a =>
|
||||||
|
{
|
||||||
|
foreach (var tempPort in ports.Select(port => port.Port).OfType<EndpointHdmiInput>())
|
||||||
|
{
|
||||||
|
tempPort.HdcpCapability = (eHdcpCapabilityType) a;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void SetHdcpStateAction(bool supportsHdcp2, DMInputPortWithCec port, uint join, BasicTriList trilist)
|
private void SetHdcpStateAction(bool supportsHdcp2, DMInputPortWithCec port, uint join, BasicTriList trilist)
|
||||||
{
|
{
|
||||||
if (!supportsHdcp2)
|
if (!supportsHdcp2)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
public override StringFeedback ActiveVideoInputFeedback { get; protected set; }
|
public override StringFeedback ActiveVideoInputFeedback { get; protected set; }
|
||||||
public IntFeedback VideoSourceNumericFeedback { get; protected set; }
|
public IntFeedback VideoSourceNumericFeedback { get; protected set; }
|
||||||
public IntFeedback AudioSourceNumericFeedback { get; protected set; }
|
public IntFeedback AudioSourceNumericFeedback { get; protected set; }
|
||||||
public IntFeedback HdmiInHdcpCapabilityFeedback { get; protected set; }
|
public IntFeedback HdmiInHdcpCapabilityFeedback { get; protected set; } //actually state
|
||||||
public BoolFeedback HdmiVideoSyncFeedback { get; protected set; }
|
public BoolFeedback HdmiVideoSyncFeedback { get; protected set; }
|
||||||
public BoolFeedback VgaVideoSyncFeedback { get; protected set; }
|
public BoolFeedback VgaVideoSyncFeedback { get; protected set; }
|
||||||
|
|
||||||
@@ -105,7 +105,10 @@ namespace PepperDash.Essentials.DM
|
|||||||
VideoSourceNumericFeedback = new IntFeedback(() => (int)Tx.VideoSourceFeedback);
|
VideoSourceNumericFeedback = new IntFeedback(() => (int)Tx.VideoSourceFeedback);
|
||||||
AudioSourceNumericFeedback = new IntFeedback(() => (int)Tx.AudioSourceFeedback);
|
AudioSourceNumericFeedback = new IntFeedback(() => (int)Tx.AudioSourceFeedback);
|
||||||
|
|
||||||
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () => tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0);
|
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () => tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0);
|
||||||
|
|
||||||
|
//setting this on the base class so that we can get it easily on the chassis.
|
||||||
|
HdcpStateFeedback = HdmiInHdcpCapabilityFeedback;
|
||||||
|
|
||||||
HdcpSupportCapability = eHdcpCapabilityType.HdcpAutoSupport;
|
HdcpSupportCapability = eHdcpCapabilityType.HdcpAutoSupport;
|
||||||
|
|
||||||
|
|||||||
@@ -111,7 +111,9 @@ namespace PepperDash.Essentials.DM
|
|||||||
AudioSourceNumericFeedback = new IntFeedback(() => (int)Tx.AudioSourceFeedback);
|
AudioSourceNumericFeedback = new IntFeedback(() => (int)Tx.AudioSourceFeedback);
|
||||||
|
|
||||||
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () =>
|
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () =>
|
||||||
(tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0));
|
(tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0));
|
||||||
|
|
||||||
|
HdcpStateFeedback = HdmiInHdcpCapabilityFeedback;
|
||||||
|
|
||||||
HdmiVideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInput.SyncDetectedFeedback.BoolValue);
|
HdmiVideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInput.SyncDetectedFeedback.BoolValue);
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,8 @@ namespace PepperDash.Essentials.DM
|
|||||||
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () =>
|
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () =>
|
||||||
(tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0));
|
(tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0));
|
||||||
|
|
||||||
|
HdcpStateFeedback = HdmiInHdcpCapabilityFeedback;
|
||||||
|
|
||||||
HdmiVideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInput.SyncDetectedFeedback.BoolValue);
|
HdmiVideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInput.SyncDetectedFeedback.BoolValue);
|
||||||
|
|
||||||
VgaVideoSyncFeedback = new BoolFeedback(() => (bool)tx.VgaInput.SyncDetectedFeedback.BoolValue);
|
VgaVideoSyncFeedback = new BoolFeedback(() => (bool)tx.VgaInput.SyncDetectedFeedback.BoolValue);
|
||||||
|
|||||||
@@ -129,7 +129,9 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
AudioSourceNumericFeedback = new IntFeedback(() => (int)Tx.AudioSourceFeedback);
|
AudioSourceNumericFeedback = new IntFeedback(() => (int)Tx.AudioSourceFeedback);
|
||||||
|
|
||||||
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () => tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0);
|
HdmiInHdcpCapabilityFeedback = new IntFeedback("HdmiInHdcpCapability", () => tx.HdmiInput.HdcpSupportOnFeedback.BoolValue ? 1 : 0);
|
||||||
|
|
||||||
|
HdcpStateFeedback = HdmiInHdcpCapabilityFeedback;
|
||||||
|
|
||||||
HdcpSupportCapability = eHdcpCapabilityType.HdcpAutoSupport;
|
HdcpSupportCapability = eHdcpCapabilityType.HdcpAutoSupport;
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,13 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
||||||
|
|
||||||
|
HdcpStateFeedback =
|
||||||
|
new IntFeedback(
|
||||||
|
() =>
|
||||||
|
tx.HdmiInputs[1].HdcpCapabilityFeedback > tx.HdmiInputs[2].HdcpCapabilityFeedback
|
||||||
|
? (int) tx.HdmiInputs[1].HdcpCapabilityFeedback
|
||||||
|
: (int) tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
||||||
|
|
||||||
HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support;
|
HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support;
|
||||||
|
|
||||||
Hdmi1VideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue);
|
Hdmi1VideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue);
|
||||||
@@ -276,12 +283,11 @@ namespace PepperDash.Essentials.DM
|
|||||||
switch (args.EventId)
|
switch (args.EventId)
|
||||||
{
|
{
|
||||||
case EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId:
|
case EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
|
||||||
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId:
|
case EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId:
|
||||||
|
case EndpointInputStreamEventIds.HdcpCapabilityFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
||||||
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
||||||
|
HdcpStateFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
case EndpointInputStreamEventIds.SyncDetectedFeedbackEventId:
|
case EndpointInputStreamEventIds.SyncDetectedFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) Hdmi1VideoSyncFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[1]) Hdmi1VideoSyncFeedback.FireUpdate();
|
||||||
|
|||||||
@@ -115,7 +115,14 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
HdmiIn1HdcpCapabilityFeedback = new IntFeedback("HdmiIn1HdcpCapability", () => (int)tx.HdmiInputs[1].HdcpCapabilityFeedback);
|
HdmiIn1HdcpCapabilityFeedback = new IntFeedback("HdmiIn1HdcpCapability", () => (int)tx.HdmiInputs[1].HdcpCapabilityFeedback);
|
||||||
|
|
||||||
HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
||||||
|
|
||||||
|
HdcpStateFeedback =
|
||||||
|
new IntFeedback(
|
||||||
|
() =>
|
||||||
|
tx.HdmiInputs[1].HdcpCapabilityFeedback > tx.HdmiInputs[2].HdcpCapabilityFeedback
|
||||||
|
? (int)tx.HdmiInputs[1].HdcpCapabilityFeedback
|
||||||
|
: (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
||||||
|
|
||||||
HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support;
|
HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support;
|
||||||
|
|
||||||
@@ -368,12 +375,11 @@ namespace PepperDash.Essentials.DM
|
|||||||
switch (args.EventId)
|
switch (args.EventId)
|
||||||
{
|
{
|
||||||
case EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId:
|
case EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
|
||||||
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId:
|
case EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId:
|
||||||
|
case EndpointInputStreamEventIds.HdcpCapabilityFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
||||||
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
||||||
|
HdcpStateFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
case EndpointInputStreamEventIds.SyncDetectedFeedbackEventId:
|
case EndpointInputStreamEventIds.SyncDetectedFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) Hdmi1VideoSyncFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[1]) Hdmi1VideoSyncFeedback.FireUpdate();
|
||||||
|
|||||||
@@ -99,6 +99,13 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
||||||
|
|
||||||
|
HdcpStateFeedback =
|
||||||
|
new IntFeedback(
|
||||||
|
() =>
|
||||||
|
tx.HdmiInputs[1].HdcpCapabilityFeedback > tx.HdmiInputs[2].HdcpCapabilityFeedback
|
||||||
|
? (int)tx.HdmiInputs[1].HdcpCapabilityFeedback
|
||||||
|
: (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
||||||
|
|
||||||
HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support;
|
HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support;
|
||||||
|
|
||||||
Hdmi1VideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue);
|
Hdmi1VideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue);
|
||||||
@@ -265,10 +272,8 @@ namespace PepperDash.Essentials.DM
|
|||||||
switch (args.EventId)
|
switch (args.EventId)
|
||||||
{
|
{
|
||||||
case EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId:
|
case EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
|
||||||
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId:
|
case EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId:
|
||||||
|
case EndpointInputStreamEventIds.HdcpCapabilityFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
||||||
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -105,6 +105,13 @@ namespace PepperDash.Essentials.DM
|
|||||||
|
|
||||||
HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
HdmiIn2HdcpCapabilityFeedback = new IntFeedback("HdmiIn2HdcpCapability", () => (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
||||||
|
|
||||||
|
HdcpStateFeedback =
|
||||||
|
new IntFeedback(
|
||||||
|
() =>
|
||||||
|
tx.HdmiInputs[1].HdcpCapabilityFeedback > tx.HdmiInputs[2].HdcpCapabilityFeedback
|
||||||
|
? (int)tx.HdmiInputs[1].HdcpCapabilityFeedback
|
||||||
|
: (int)tx.HdmiInputs[2].HdcpCapabilityFeedback);
|
||||||
|
|
||||||
HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support;
|
HdcpSupportCapability = eHdcpCapabilityType.Hdcp2_2Support;
|
||||||
|
|
||||||
Hdmi1VideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue);
|
Hdmi1VideoSyncFeedback = new BoolFeedback(() => (bool)tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue);
|
||||||
@@ -275,12 +282,11 @@ namespace PepperDash.Essentials.DM
|
|||||||
switch (args.EventId)
|
switch (args.EventId)
|
||||||
{
|
{
|
||||||
case EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId:
|
case EndpointInputStreamEventIds.HdcpSupportOffFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
|
||||||
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
|
||||||
break;
|
|
||||||
case EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId:
|
case EndpointInputStreamEventIds.HdcpSupportOnFeedbackEventId:
|
||||||
|
case EndpointInputStreamEventIds.HdcpCapabilityFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[1]) HdmiIn1HdcpCapabilityFeedback.FireUpdate();
|
||||||
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[2]) HdmiIn2HdcpCapabilityFeedback.FireUpdate();
|
||||||
|
HdcpStateFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
case EndpointInputStreamEventIds.SyncDetectedFeedbackEventId:
|
case EndpointInputStreamEventIds.SyncDetectedFeedbackEventId:
|
||||||
if (inputStream == Tx.HdmiInputs[1]) Hdmi1VideoSyncFeedback.FireUpdate();
|
if (inputStream == Tx.HdmiInputs[1]) Hdmi1VideoSyncFeedback.FireUpdate();
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
public virtual eHdcpCapabilityType HdcpSupportCapability { get; protected set; }
|
public virtual eHdcpCapabilityType HdcpSupportCapability { get; protected set; }
|
||||||
public abstract StringFeedback ActiveVideoInputFeedback { get; protected set; }
|
public abstract StringFeedback ActiveVideoInputFeedback { get; protected set; }
|
||||||
public RoutingInputPortWithVideoStatuses AnyVideoInput { get; protected set; }
|
public RoutingInputPortWithVideoStatuses AnyVideoInput { get; protected set; }
|
||||||
|
public IntFeedback HdcpStateFeedback { get; protected set; }
|
||||||
|
|
||||||
protected DmTxControllerBase(string key, string name, EndpointTransmitterBase hardware)
|
protected DmTxControllerBase(string key, string name, EndpointTransmitterBase hardware)
|
||||||
: base(key, name, hardware)
|
: base(key, name, hardware)
|
||||||
|
|||||||
Reference in New Issue
Block a user