mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-02 06:14:52 +00:00
Reworks audio routing on DMPS-4K units.
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro.DM;
|
||||
using Crestron.SimplSharpPro.DM.Cards;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
|
||||
namespace PepperDash.Essentials.DM
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class DmpsDigitalOutputController : Device, IRoutingNumericWithFeedback, IHasFeedback
|
||||
{
|
||||
public Card.Dmps3OutputBase OutputCard { get; protected set; }
|
||||
|
||||
public RoutingInputPort None { get; protected set; }
|
||||
public RoutingInputPort DigitalMix1 { get; protected set; }
|
||||
public RoutingInputPort DigitalMix2 { get; protected set; }
|
||||
public RoutingInputPort AudioFollowsVideo { get; protected set; }
|
||||
|
||||
public RoutingOutputPort DigitalAudioOut { get; protected set; }
|
||||
|
||||
public IntFeedback AudioSourceNumericFeedback { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns a list containing the Outputs that we want to expose.
|
||||
/// </summary>
|
||||
public FeedbackCollection<Feedback> Feedbacks { get; private set; }
|
||||
|
||||
public virtual RoutingPortCollection<RoutingInputPort> InputPorts
|
||||
{
|
||||
get
|
||||
{
|
||||
return new RoutingPortCollection<RoutingInputPort>
|
||||
{
|
||||
None,
|
||||
DigitalMix1,
|
||||
DigitalMix2,
|
||||
AudioFollowsVideo
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public RoutingPortCollection<RoutingOutputPort> OutputPorts
|
||||
{
|
||||
get
|
||||
{
|
||||
return new RoutingPortCollection<RoutingOutputPort> { DigitalAudioOut };
|
||||
}
|
||||
}
|
||||
|
||||
public DmpsDigitalOutputController(string key, string name, Card.Dmps3OutputBase outputCard)
|
||||
: base(key, name)
|
||||
{
|
||||
Feedbacks = new FeedbackCollection<Feedback>();
|
||||
OutputCard = outputCard;
|
||||
|
||||
if (outputCard is Card.Dmps3DmOutputBackend)
|
||||
{
|
||||
AudioSourceNumericFeedback = new IntFeedback(() =>
|
||||
{
|
||||
return (int)(outputCard as Card.Dmps3DmOutputBackend).AudioOutSourceDeviceFeedback;
|
||||
});
|
||||
DigitalAudioOut = new RoutingOutputPort(DmPortName.DmOut + OutputCard.Number, eRoutingSignalType.Audio, eRoutingPortConnectionType.DmCat, null, this);
|
||||
}
|
||||
|
||||
else if (outputCard is Card.Dmps3HdmiOutputBackend)
|
||||
{
|
||||
AudioSourceNumericFeedback = new IntFeedback(() =>
|
||||
{
|
||||
return (int)(outputCard as Card.Dmps3HdmiOutputBackend).AudioOutSourceDeviceFeedback;
|
||||
});
|
||||
DigitalAudioOut = new RoutingOutputPort(DmPortName.HdmiOut + OutputCard.Number, eRoutingSignalType.Audio, eRoutingPortConnectionType.Hdmi, null, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
None = new RoutingInputPort("None", eRoutingSignalType.Audio, eRoutingPortConnectionType.DigitalAudio,
|
||||
eDmps34KAudioOutSourceDevice.NoRoute, this);
|
||||
DigitalMix1 = new RoutingInputPort("DigitalMix1", eRoutingSignalType.Audio, eRoutingPortConnectionType.DigitalAudio,
|
||||
eDmps34KAudioOutSourceDevice.DigitalMixer1, this);
|
||||
DigitalMix2 = new RoutingInputPort("DigitalMix2", eRoutingSignalType.Audio, eRoutingPortConnectionType.DigitalAudio,
|
||||
eDmps34KAudioOutSourceDevice.DigitalMixer2, this);
|
||||
AudioFollowsVideo = new RoutingInputPort("AudioFollowsVideo", eRoutingSignalType.Audio, eRoutingPortConnectionType.DigitalAudio,
|
||||
eDmps34KAudioOutSourceDevice.AudioFollowsVideo, this);
|
||||
|
||||
AddToFeedbackList(AudioSourceNumericFeedback);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds feedback(s) to the list
|
||||
/// </summary>
|
||||
/// <param name="newFbs"></param>
|
||||
public void AddToFeedbackList(params Feedback[] newFbs)
|
||||
{
|
||||
foreach (var f in newFbs)
|
||||
{
|
||||
if (f != null)
|
||||
{
|
||||
if (!Feedbacks.Contains(f))
|
||||
{
|
||||
Feedbacks.Add(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type)
|
||||
{
|
||||
Debug.Console(2, this, "Executing Numeric Switch to input {0}.", input);
|
||||
|
||||
switch (input)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
ExecuteSwitch(None.Selector, null, type);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
ExecuteSwitch(DigitalMix1.Selector, null, type);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
ExecuteSwitch(DigitalMix2.Selector, null, type);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
ExecuteSwitch(AudioFollowsVideo.Selector, null, type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#region IRouting Members
|
||||
|
||||
public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType)
|
||||
{
|
||||
if ((signalType | eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
|
||||
{
|
||||
if (OutputCard is Card.Dmps3DmOutputBackend)
|
||||
{
|
||||
(OutputCard as Card.Dmps3DmOutputBackend).AudioOutSourceDevice = (eDmps34KAudioOutSourceDevice)inputSelector;
|
||||
}
|
||||
else if (OutputCard is Card.Dmps3HdmiOutputBackend)
|
||||
{
|
||||
(OutputCard as Card.Dmps3HdmiOutputBackend).AudioOutSourceDevice = (eDmps34KAudioOutSourceDevice)inputSelector;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IRoutingFeedback Members
|
||||
|
||||
public event EventHandler<RoutingNumericEventArgs> NumericSwitchChange;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -38,6 +38,9 @@ namespace PepperDash.Essentials.DM
|
||||
|
||||
void Dmps_MicrophoneChange(MicrophoneBase mic, GenericEventArgs args)
|
||||
{
|
||||
if (args.EventId == MicrophoneEventIds.VuFeedBackEventId)
|
||||
return;
|
||||
|
||||
Debug.Console(2, "Dmps Microphone Controller Index: {0} EventId: {1}", mic.ID, args.EventId.ToString());
|
||||
|
||||
if(Mics.ContainsKey(mic.ID))
|
||||
|
||||
@@ -59,6 +59,7 @@ namespace PepperDash.Essentials.DM
|
||||
public Dictionary<uint, string> InputNames { get; set; }
|
||||
public Dictionary<uint, string> OutputNames { get; set; }
|
||||
public Dictionary<uint, DmCardAudioOutputController> VolumeControls { get; private set; }
|
||||
public Dictionary<uint, DmpsDigitalOutputController> DigitalAudioOutputs { get; private set; }
|
||||
public DmpsMicrophoneController Microphones { get; private set; }
|
||||
|
||||
public const int RouteOffTime = 500;
|
||||
@@ -155,6 +156,7 @@ namespace PepperDash.Essentials.DM
|
||||
InputPorts = new RoutingPortCollection<RoutingInputPort>();
|
||||
OutputPorts = new RoutingPortCollection<RoutingOutputPort>();
|
||||
VolumeControls = new Dictionary<uint, DmCardAudioOutputController>();
|
||||
DigitalAudioOutputs = new Dictionary<uint, DmpsDigitalOutputController>();
|
||||
TxDictionary = new Dictionary<uint, string>();
|
||||
RxDictionary = new Dictionary<uint, string>();
|
||||
|
||||
@@ -246,13 +248,15 @@ namespace PepperDash.Essentials.DM
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var kvp in OutputNames)
|
||||
{
|
||||
var output = (Dmps.SwitcherOutputs[kvp.Key] as DMOutput);
|
||||
if (output != null && output.Name.Type != eSigType.NA)
|
||||
if (output != null)
|
||||
{
|
||||
output.Name.StringValue = kvp.Value;
|
||||
if (output.Name.Supported && kvp.Value.Length > 0)
|
||||
{
|
||||
output.Name.StringValue = kvp.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -266,9 +270,12 @@ namespace PepperDash.Essentials.DM
|
||||
foreach (var kvp in InputNames)
|
||||
{
|
||||
var input = (Dmps.SwitcherInputs[kvp.Key] as DMInput);
|
||||
if (input != null && input.Name.Type != eSigType.NA)
|
||||
if (input != null)
|
||||
{
|
||||
input.Name.StringValue = kvp.Value;
|
||||
if (input.Name.Supported && kvp.Value.Length > 0)
|
||||
{
|
||||
input.Name.StringValue = kvp.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -376,9 +383,20 @@ namespace PepperDash.Essentials.DM
|
||||
}
|
||||
if (OutputNameFeedbacks[ioSlot] != null)
|
||||
{
|
||||
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputNames.JoinNumber + ioSlotJoin]);
|
||||
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputVideoNames.JoinNumber + ioSlotJoin]);
|
||||
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputAudioNames.JoinNumber + ioSlotJoin]);
|
||||
if (Dmps.SwitcherOutputs[ioSlot].CardInputOutputType == eCardInputOutputType.Dmps3DmOutput ||
|
||||
Dmps.SwitcherOutputs[ioSlot].CardInputOutputType == eCardInputOutputType.Dmps3DmOutputBackend ||
|
||||
Dmps.SwitcherOutputs[ioSlot].CardInputOutputType == eCardInputOutputType.Dmps3HdmiOutput ||
|
||||
Dmps.SwitcherOutputs[ioSlot].CardInputOutputType == eCardInputOutputType.Dmps3HdmiOutputBackend)
|
||||
{
|
||||
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputVideoNames.JoinNumber + ioSlotJoin]);
|
||||
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputNames.JoinNumber + ioSlotJoin]);
|
||||
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputAudioNames.JoinNumber + ioSlotJoin]);
|
||||
}
|
||||
else
|
||||
{
|
||||
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputNames.JoinNumber + ioSlotJoin]);
|
||||
OutputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.OutputAudioNames.JoinNumber + ioSlotJoin]);
|
||||
}
|
||||
}
|
||||
if (OutputVideoRouteNameFeedbacks[ioSlot] != null)
|
||||
{
|
||||
@@ -402,11 +420,15 @@ namespace PepperDash.Essentials.DM
|
||||
{
|
||||
if (Global.ControlSystemIsDmps4kType)
|
||||
{
|
||||
//DMPS-4K audio inputs 1-5 are aux inputs
|
||||
for (uint i = 1; i <= 5; i++)
|
||||
//DMPS-4K audio inputs 1-5 are aux inputs, add them after regular dm cards
|
||||
for (ushort i = 1; i <= 5; i++)
|
||||
{
|
||||
trilist.StringInput[joinMap.InputAudioNames.JoinNumber + i - 1].StringValue = String.Format("Aux Input {0}", i);
|
||||
trilist.StringInput[joinMap.InputAudioNames.JoinNumber + i - 1 + (ushort)Dmps.SwitcherInputs.Count].StringValue = String.Format("Aux Input {0}", i);
|
||||
}
|
||||
|
||||
//Add DMPS-4K mixer input names to end of inputs
|
||||
trilist.StringInput[joinMap.InputAudioNames.JoinNumber + (uint)Dmps.SwitcherInputs.Count + 5].StringValue = "Digital Mixer 1";
|
||||
trilist.StringInput[joinMap.InputAudioNames.JoinNumber + (uint)Dmps.SwitcherInputs.Count + 6].StringValue = "Digital Mixer 2";
|
||||
}
|
||||
for (uint i = 1; i <= Dmps.SwitcherInputs.Count; i++)
|
||||
{
|
||||
@@ -425,16 +447,7 @@ namespace PepperDash.Essentials.DM
|
||||
{
|
||||
InputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.InputNames.JoinNumber + ioSlotJoin]);
|
||||
InputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.InputVideoNames.JoinNumber + ioSlotJoin]);
|
||||
|
||||
if (Global.ControlSystemIsDmps4kType)
|
||||
{
|
||||
//DMPS-4K Audio Inputs are offset by 5
|
||||
InputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.InputAudioNames.JoinNumber + ioSlotJoin + 5]);
|
||||
}
|
||||
else
|
||||
{
|
||||
InputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.InputAudioNames.JoinNumber + ioSlotJoin]);
|
||||
}
|
||||
InputNameFeedbacks[ioSlot].LinkInputSig(trilist.StringInput[joinMap.InputAudioNames.JoinNumber + ioSlotJoin]);
|
||||
}
|
||||
|
||||
trilist.SetStringSigAction(joinMap.InputNames.JoinNumber + ioSlotJoin, s =>
|
||||
@@ -496,7 +509,7 @@ namespace PepperDash.Essentials.DM
|
||||
});
|
||||
AudioOutputFeedbacks[outputCard.Number] = new IntFeedback(() =>
|
||||
{
|
||||
try
|
||||
if (!Global.ControlSystemIsDmps4kType)
|
||||
{
|
||||
if (outputCard.AudioOutFeedback != null)
|
||||
{
|
||||
@@ -504,15 +517,58 @@ namespace PepperDash.Essentials.DM
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
catch (NotSupportedException)
|
||||
else
|
||||
{
|
||||
return (ushort)outputCard.AudioOutSourceFeedback;
|
||||
|
||||
if (outputCard is Card.Dmps3DmOutputBackend || outputCard is Card.Dmps3HdmiOutputBackend)
|
||||
{
|
||||
//Special cases for DMPS-4K digital audio output
|
||||
if (DigitalAudioOutputs[outputCard.Number].AudioSourceNumericFeedback.UShortValue == 0)
|
||||
return 0;
|
||||
else if (DigitalAudioOutputs[outputCard.Number].AudioSourceNumericFeedback.UShortValue == 1)
|
||||
return (ushort)Dmps.SwitcherInputs.Count + 6;
|
||||
else if (DigitalAudioOutputs[outputCard.Number].AudioSourceNumericFeedback.UShortValue == 2)
|
||||
return (ushort)Dmps.SwitcherInputs.Count + 7;
|
||||
else if (DigitalAudioOutputs[outputCard.Number].AudioSourceNumericFeedback.UShortValue == 3)
|
||||
return (ushort)outputCard.VideoOutFeedback.Number;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
else if (outputCard.AudioOutSourceFeedback == eDmps34KAudioOutSource.NoRoute)
|
||||
{
|
||||
//Fixes for weird audio indexing on DMPS3-4K
|
||||
return 0;
|
||||
}
|
||||
else if (outputCard.AudioOutSourceFeedback == eDmps34KAudioOutSource.AirMedia8)
|
||||
{
|
||||
//Fixes for weird audio indexing on DMPS3-4K
|
||||
return 8;
|
||||
}
|
||||
else if (outputCard.AudioOutSourceFeedback == eDmps34KAudioOutSource.AirMedia9)
|
||||
{
|
||||
//Fixes for weird audio indexing on DMPS3-4K
|
||||
return 9;
|
||||
}
|
||||
else if ((ushort)outputCard.AudioOutSourceFeedback <= 5)
|
||||
{
|
||||
//Move analog inputs to after regular dm cards
|
||||
return (ushort)outputCard.AudioOutSourceFeedback + (ushort)Dmps.SwitcherInputs.Count;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Fixes for weird audio indexing on DMPS3-4K
|
||||
return (ushort)outputCard.AudioOutSourceFeedback - 5;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
OutputNameFeedbacks[outputCard.Number] = new StringFeedback(() =>
|
||||
{
|
||||
if (outputCard.NameFeedback != null && outputCard.NameFeedback != CrestronControlSystem.NullStringOutputSig && !string.IsNullOrEmpty(outputCard.NameFeedback.StringValue))
|
||||
if(OutputNames.ContainsKey(outputCard.Number))
|
||||
{
|
||||
return OutputNames[outputCard.Number];
|
||||
}
|
||||
else if (outputCard.NameFeedback != null && outputCard.NameFeedback != CrestronControlSystem.NullStringOutputSig && !string.IsNullOrEmpty(outputCard.NameFeedback.StringValue))
|
||||
{
|
||||
Debug.Console(2, this, "Output Card {0} Name: {1}", outputCard.Number, outputCard.NameFeedback.StringValue);
|
||||
return outputCard.NameFeedback.StringValue;
|
||||
@@ -530,9 +586,33 @@ namespace PepperDash.Essentials.DM
|
||||
});
|
||||
OutputAudioRouteNameFeedbacks[outputCard.Number] = new StringFeedback(() =>
|
||||
{
|
||||
if (outputCard.AudioOutFeedback != null && outputCard.AudioOutFeedback.NameFeedback != null)
|
||||
if (!Global.ControlSystemIsDmps4kType)
|
||||
{
|
||||
return outputCard.AudioOutFeedback.NameFeedback.StringValue;
|
||||
if (outputCard.AudioOutFeedback != null && outputCard.AudioOutFeedback.NameFeedback != null)
|
||||
{
|
||||
return outputCard.AudioOutFeedback.NameFeedback.StringValue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (outputCard is Card.Dmps3DmOutputBackend || outputCard is Card.Dmps3HdmiOutputBackend)
|
||||
{
|
||||
//Special cases for DMPS-4K digital audio output
|
||||
if (DigitalAudioOutputs[outputCard.Number].AudioSourceNumericFeedback.UShortValue == 0)
|
||||
return NoRouteText;
|
||||
else if (DigitalAudioOutputs[outputCard.Number].AudioSourceNumericFeedback.UShortValue == 1)
|
||||
return "Digital Mix 1";
|
||||
else if (DigitalAudioOutputs[outputCard.Number].AudioSourceNumericFeedback.UShortValue == 2)
|
||||
return "Digital Mix 2";
|
||||
else if (DigitalAudioOutputs[outputCard.Number].AudioSourceNumericFeedback.UShortValue == 3)
|
||||
return outputCard.VideoOutFeedback.NameFeedback.StringValue;
|
||||
else
|
||||
return NoRouteText;
|
||||
}
|
||||
else
|
||||
{
|
||||
return outputCard.AudioOutSourceFeedback.ToString();
|
||||
}
|
||||
}
|
||||
return NoRouteText;
|
||||
});
|
||||
@@ -570,13 +650,15 @@ namespace PepperDash.Essentials.DM
|
||||
|
||||
InputNameFeedbacks[inputCard.Number] = new StringFeedback(() =>
|
||||
{
|
||||
if (inputCard.NameFeedback != null && inputCard.NameFeedback != CrestronControlSystem.NullStringOutputSig && !string.IsNullOrEmpty(inputCard.NameFeedback.StringValue))
|
||||
if (InputNames.ContainsKey(inputCard.Number))
|
||||
{
|
||||
return InputNames[inputCard.Number];
|
||||
}
|
||||
else if (inputCard.NameFeedback != null && inputCard.NameFeedback != CrestronControlSystem.NullStringOutputSig && !string.IsNullOrEmpty(inputCard.NameFeedback.StringValue))
|
||||
{
|
||||
Debug.Console(2, this, "Input Card {0} Name: {1}", inputCard.Number, inputCard.NameFeedback.StringValue);
|
||||
return inputCard.NameFeedback.StringValue;
|
||||
}
|
||||
|
||||
Debug.Console(2, this, "Input Card {0} Name is null", inputCard.Number);
|
||||
return "";
|
||||
});
|
||||
|
||||
@@ -705,10 +787,11 @@ namespace PepperDash.Essentials.DM
|
||||
else if (outputCard is Card.Dmps3HdmiOutputBackend)
|
||||
{
|
||||
var hdmiOutputCard = outputCard as Card.Dmps3HdmiOutputBackend;
|
||||
|
||||
var cecPort = hdmiOutputCard.HdmiOutputPort;
|
||||
|
||||
AddHdmiOutputPort(number, cecPort);
|
||||
var audioOutput = new DmpsDigitalOutputController(string.Format("processor-avRouting-HdmiAudioOut{0}", number), string.Format("Hdmi Audio Output {0} Router", number), hdmiOutputCard);
|
||||
DigitalAudioOutputs.Add(number, audioOutput);
|
||||
DeviceManager.AddDevice(audioOutput);
|
||||
}
|
||||
else if (outputCard is Card.Dmps3DmOutput)
|
||||
{
|
||||
@@ -720,6 +803,9 @@ namespace PepperDash.Essentials.DM
|
||||
else if (outputCard is Card.Dmps3DmOutputBackend)
|
||||
{
|
||||
AddDmOutputPort(number);
|
||||
var audioOutput = new DmpsDigitalOutputController(string.Format("processor-avRouting-DmAudioOut{0}", number), string.Format("Dm Audio Output {0} Router", number), outputCard as Card.Dmps3DmOutputBackend);
|
||||
DigitalAudioOutputs.Add(number, audioOutput);
|
||||
DeviceManager.AddDevice(audioOutput);
|
||||
}
|
||||
else if (outputCard is Card.Dmps3ProgramOutput)
|
||||
{
|
||||
@@ -737,7 +823,7 @@ namespace PepperDash.Essentials.DM
|
||||
{
|
||||
AddAudioOnlyOutputPort(number, "Aux1");
|
||||
|
||||
var aux1Output = new DmpsAudioOutputController(string.Format("processor-aux1AudioOutput"), "Program Audio Output", outputCard as Card.Dmps3Aux1Output);
|
||||
var aux1Output = new DmpsAudioOutputController(string.Format("processor-aux1AudioOutput"), "Aux1 Audio Output", outputCard as Card.Dmps3Aux1Output);
|
||||
|
||||
DeviceManager.AddDevice(aux1Output);
|
||||
}
|
||||
@@ -746,7 +832,7 @@ namespace PepperDash.Essentials.DM
|
||||
{
|
||||
AddAudioOnlyOutputPort(number, "Aux2");
|
||||
|
||||
var aux2Output = new DmpsAudioOutputController(string.Format("processor-aux2AudioOutput"), "Program Audio Output", outputCard as Card.Dmps3Aux2Output);
|
||||
var aux2Output = new DmpsAudioOutputController(string.Format("processor-aux2AudioOutput"), "Aux2 Audio Output", outputCard as Card.Dmps3Aux2Output);
|
||||
|
||||
DeviceManager.AddDevice(aux2Output);
|
||||
}
|
||||
@@ -788,7 +874,7 @@ namespace PepperDash.Essentials.DM
|
||||
|| number == (uint)CrestronControlSystem.eDmps34K350COutputs.Mix2)
|
||||
AddAudioOnlyOutputPort(number, CrestronControlSystem.eDmps34K250COutputs.Mix2.ToString());
|
||||
|
||||
var audioOutput = new DmpsAudioOutputController(string.Format("processor-digitalAudioOutput{0}", number % 2 + 1), string.Format("Digital Audio Output {0}", number % 2 + 1), outputCard as Card.Dmps3DigitalMixOutput);
|
||||
var audioOutput = new DmpsAudioOutputController(string.Format("processor-digitalAudioOutput{0}", number % 2 + 1), string.Format("Digital Audio Mix {0}", number % 2 + 1), outputCard as Card.Dmps3DigitalMixOutput);
|
||||
DeviceManager.AddDevice(audioOutput);
|
||||
}
|
||||
else
|
||||
@@ -902,14 +988,13 @@ namespace PepperDash.Essentials.DM
|
||||
}
|
||||
void Dmps_DMOutputChange(Switch device, DMOutputEventArgs args)
|
||||
{
|
||||
Debug.Console(2, this, "DMOutputChange Output: {0} EventId: {1}", args.Number, args.EventId.ToString());
|
||||
|
||||
if (args.EventId == DMOutputEventIds.OutputVuFeedBackEventId)
|
||||
{
|
||||
//Frequently called event that isn't needed
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Console(2, this, "DMOutputChange Output: {0} EventId: {1}", args.Number, args.EventId.ToString());
|
||||
var output = args.Number;
|
||||
|
||||
DMOutput outputCard = Dmps.SwitcherOutputs[output] as DMOutput;
|
||||
@@ -942,41 +1027,68 @@ namespace PepperDash.Essentials.DM
|
||||
{
|
||||
OutputVideoRouteNameFeedbacks[output].FireUpdate();
|
||||
}
|
||||
if (outputCard is Card.Dmps3DmOutputBackend || outputCard is Card.Dmps3HdmiOutputBackend)
|
||||
{
|
||||
if (AudioOutputFeedbacks.ContainsKey(output))
|
||||
{
|
||||
AudioOutputFeedbacks[output].FireUpdate();
|
||||
}
|
||||
if (OutputAudioRouteNameFeedbacks.ContainsKey(output))
|
||||
{
|
||||
OutputAudioRouteNameFeedbacks[output].FireUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (args.EventId == DMOutputEventIds.AudioOutEventId)
|
||||
{
|
||||
try
|
||||
if (!Global.ControlSystemIsDmps4kType)
|
||||
{
|
||||
if (outputCard != null && outputCard.AudioOutFeedback != null)
|
||||
{
|
||||
Debug.Console(2, this, "DMSwitchAudio:{0} Routed Input:{1} Output:{2}'", this.Name,
|
||||
outputCard.AudioOutFeedback.Number, output);
|
||||
}
|
||||
if (AudioOutputFeedbacks.ContainsKey(output))
|
||||
{
|
||||
AudioOutputFeedbacks[output].FireUpdate();
|
||||
}
|
||||
}
|
||||
catch (NotSupportedException)
|
||||
else
|
||||
{
|
||||
if (outputCard != null)
|
||||
{
|
||||
Debug.Console(2, this, "DMSwitchAudio:{0} Routed Input:{1} Output:{2}'", Name,
|
||||
outputCard.AudioOutSourceFeedback, output);
|
||||
}
|
||||
if (AudioOutputFeedbacks.ContainsKey(output))
|
||||
{
|
||||
AudioOutputFeedbacks[output].FireUpdate();
|
||||
if (outputCard is Card.Dmps3DmOutputBackend || outputCard is Card.Dmps3HdmiOutputBackend)
|
||||
{
|
||||
DigitalAudioOutputs[output].AudioSourceNumericFeedback.FireUpdate();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(2, this, "DMSwitchAudio:{0} Routed Input:{1} Output:{2}'", Name,
|
||||
outputCard.AudioOutSourceFeedback, output);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (AudioOutputFeedbacks.ContainsKey(output))
|
||||
{
|
||||
AudioOutputFeedbacks[output].FireUpdate();
|
||||
}
|
||||
if (OutputAudioRouteNameFeedbacks.ContainsKey(output))
|
||||
{
|
||||
OutputAudioRouteNameFeedbacks[output].FireUpdate();
|
||||
}
|
||||
}
|
||||
else if (args.EventId == DMOutputEventIds.OutputNameEventId
|
||||
&& OutputNameFeedbacks.ContainsKey(output))
|
||||
{
|
||||
Debug.Console(2, this, "DM Output {0} NameFeedbackEventId", output);
|
||||
OutputNameFeedbacks[output].FireUpdate();
|
||||
}
|
||||
|
||||
else if (args.EventId == DMOutputEventIds.DigitalMixerAudioSourceFeedBackEventId)
|
||||
{
|
||||
if (AudioOutputFeedbacks.ContainsKey(output))
|
||||
{
|
||||
AudioOutputFeedbacks[output].FireUpdate();
|
||||
}
|
||||
if (OutputAudioRouteNameFeedbacks.ContainsKey(output))
|
||||
{
|
||||
OutputAudioRouteNameFeedbacks[output].FireUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Dmps_DMSystemChange(Switch device, DMSystemEventArgs args)
|
||||
@@ -1024,9 +1136,6 @@ namespace PepperDash.Essentials.DM
|
||||
|
||||
Debug.Console(2, this, "Attempting a DM route from input {0} to output {1} {2}", inputSelector, outputSelector, sigType);
|
||||
|
||||
//var input = Convert.ToUInt32(inputSelector); // Cast can sometimes fail
|
||||
//var output = Convert.ToUInt32(outputSelector);
|
||||
|
||||
var input = inputSelector as DMInput;
|
||||
var output = outputSelector as DMOutput;
|
||||
|
||||
@@ -1044,7 +1153,7 @@ namespace PepperDash.Essentials.DM
|
||||
|
||||
if (input == null || (input.Number <= Dmps.NumberOfSwitcherInputs && output.Number <= Dmps.NumberOfSwitcherOutputs &&
|
||||
sigTypeIsUsbOrVideo) ||
|
||||
(input.Number <= Dmps.NumberOfSwitcherInputs + 5 && output.Number <= Dmps.NumberOfSwitcherOutputs &&
|
||||
(input.Number <= (Dmps.NumberOfSwitcherInputs) && output.Number <= Dmps.NumberOfSwitcherOutputs &&
|
||||
(sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio))
|
||||
{
|
||||
// Check to see if there's an off timer waiting on this and if so, cancel
|
||||
@@ -1063,11 +1172,6 @@ namespace PepperDash.Essentials.DM
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//DMOutput dmOutputCard = output == 0 ? null : Dmps.SwitcherOutputs[output] as DMOutput;
|
||||
|
||||
//if (inCard != null)
|
||||
//{
|
||||
// NOTE THAT BITWISE COMPARISONS - TO CATCH ALL ROUTING TYPES
|
||||
if ((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video)
|
||||
{
|
||||
@@ -1076,19 +1180,34 @@ namespace PepperDash.Essentials.DM
|
||||
|
||||
if ((sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
|
||||
{
|
||||
try
|
||||
if(!Global.ControlSystemIsDmps4kType)
|
||||
{
|
||||
output.AudioOut = input;
|
||||
}
|
||||
catch (NotSupportedException)
|
||||
else
|
||||
{
|
||||
Debug.Console(1, this, "Routing input {0} audio to output {1}",
|
||||
(eDmps34KAudioOutSource) (input == null ? 0 : input.Number),
|
||||
(CrestronControlSystem.eDmps34K350COutputs) output.Number);
|
||||
|
||||
output.AudioOutSource = input == null
|
||||
? eDmps34KAudioOutSource.NoRoute
|
||||
: (eDmps34KAudioOutSource)input.Number;
|
||||
if (input == null)
|
||||
{
|
||||
output.AudioOutSource = eDmps34KAudioOutSource.NoRoute;
|
||||
}
|
||||
else if (input.CardInputOutputType == eCardInputOutputType.Dmps3AirMediaInput || input.CardInputOutputType == eCardInputOutputType.Dmps3AirMediaNoStreamingInput)
|
||||
{
|
||||
//Special case for weird AirMedia indexing
|
||||
if (Dmps.SystemControl.SystemControlType == eSystemControlType.Dmps34K250CSystemControl)
|
||||
output.AudioOutSource = eDmps34KAudioOutSource.AirMedia8;
|
||||
else if (Dmps.SystemControl.SystemControlType == eSystemControlType.Dmps34K350CSystemControl)
|
||||
output.AudioOutSource = eDmps34KAudioOutSource.AirMedia9;
|
||||
}
|
||||
else if (input.Number <= Dmps.SwitcherInputs.Count)
|
||||
{
|
||||
//Shift video inputs by 5 for weird DMPS3-4K indexing
|
||||
output.AudioOutSource = (eDmps34KAudioOutSource)(input.Number + 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Shift analog inputs back to inputs 1-5
|
||||
output.AudioOutSource = (eDmps34KAudioOutSource)(input.Number - Dmps.SwitcherInputs.Count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1122,10 +1241,91 @@ namespace PepperDash.Essentials.DM
|
||||
|
||||
public void ExecuteNumericSwitch(ushort inputSelector, ushort outputSelector, eRoutingSignalType sigType)
|
||||
{
|
||||
var input = inputSelector == 0 ? null : Dmps.SwitcherInputs[inputSelector];
|
||||
var output = Dmps.SwitcherOutputs[outputSelector];
|
||||
if (EnableRouting == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ExecuteSwitch(input, output, sigType);
|
||||
Debug.Console(1, this, "Attempting a numeric switch from input {0} to output {1} {2}", inputSelector, outputSelector, sigType);
|
||||
|
||||
if((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video)
|
||||
{
|
||||
if (inputSelector <= Dmps.SwitcherInputs.Count && outputSelector <= Dmps.SwitcherOutputs.Count)
|
||||
{
|
||||
var input = inputSelector == 0 ? null : Dmps.SwitcherInputs[inputSelector];
|
||||
var output = Dmps.SwitcherOutputs[outputSelector];
|
||||
|
||||
ExecuteSwitch(input, output, sigType);
|
||||
}
|
||||
}
|
||||
else if ((sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
|
||||
{
|
||||
//Special case for DMPS-4K digital audio output
|
||||
if (Global.ControlSystemIsDmps4kType)
|
||||
{
|
||||
if (DigitalAudioOutputs.ContainsKey(outputSelector))
|
||||
{
|
||||
if (inputSelector == 0) //Clear action
|
||||
{
|
||||
DigitalAudioOutputs[outputSelector].ExecuteNumericSwitch(0, 0, eRoutingSignalType.Audio);
|
||||
}
|
||||
else if (inputSelector <= Dmps.SwitcherInputs.Count) //DMPS-4K video inputs, set to audio follows video
|
||||
{
|
||||
DigitalAudioOutputs[outputSelector].ExecuteNumericSwitch(3, 0, eRoutingSignalType.Audio);
|
||||
//Force video route since it is now set so audio follows video
|
||||
ExecuteNumericSwitch(inputSelector, outputSelector, eRoutingSignalType.Video);
|
||||
}
|
||||
else if (inputSelector == Dmps.SwitcherInputs.Count + 6)
|
||||
{
|
||||
//Set to mix 1
|
||||
DigitalAudioOutputs[outputSelector].ExecuteNumericSwitch(1, 0, eRoutingSignalType.Audio);
|
||||
}
|
||||
else if (inputSelector == Dmps.SwitcherInputs.Count + 7)
|
||||
{
|
||||
//Set to mix 2
|
||||
DigitalAudioOutputs[outputSelector].ExecuteNumericSwitch(2, 0, eRoutingSignalType.Audio);
|
||||
}
|
||||
}
|
||||
else if (inputSelector <= (Dmps.SwitcherInputs.Count + 5) && outputSelector <= Dmps.SwitcherOutputs.Count)
|
||||
{
|
||||
var output = Dmps.SwitcherOutputs[outputSelector] as DMOutput;
|
||||
if (inputSelector == 0)
|
||||
{
|
||||
output.AudioOutSource = eDmps34KAudioOutSource.NoRoute;
|
||||
}
|
||||
else if(inputSelector > Dmps.SwitcherInputs.Count)
|
||||
{
|
||||
//Shift analog inputs back to inputs 1-5
|
||||
Debug.Console(1, this, "Attempting analog route input {0} to output {1}", inputSelector - Dmps.SwitcherInputs.Count, outputSelector);
|
||||
output.AudioOutSource = (eDmps34KAudioOutSource)(inputSelector - Dmps.SwitcherInputs.Count);
|
||||
}
|
||||
else if (inputSelector <= Dmps.SwitcherInputs.Count)
|
||||
{
|
||||
var input = Dmps.SwitcherInputs[inputSelector] as DMInput;
|
||||
if (input.CardInputOutputType == eCardInputOutputType.Dmps3AirMediaInput || input.CardInputOutputType == eCardInputOutputType.Dmps3AirMediaNoStreamingInput)
|
||||
{
|
||||
//Special case for weird AirMedia indexing
|
||||
if (Dmps.SystemControl.SystemControlType == eSystemControlType.Dmps34K250CSystemControl)
|
||||
output.AudioOutSource = eDmps34KAudioOutSource.AirMedia8;
|
||||
else if (Dmps.SystemControl.SystemControlType == eSystemControlType.Dmps34K350CSystemControl)
|
||||
output.AudioOutSource = eDmps34KAudioOutSource.AirMedia9;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Shift video inputs by 5 for weird DMPS3-4K indexing
|
||||
output.AudioOutSource = (eDmps34KAudioOutSource)(inputSelector + 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (inputSelector <= Dmps.SwitcherInputs.Count && outputSelector <= Dmps.SwitcherOutputs.Count)
|
||||
{
|
||||
var output = Dmps.SwitcherOutputs[outputSelector] as DMOutput;
|
||||
var input = Dmps.SwitcherInputs[inputSelector] as DMInput;
|
||||
output.AudioOut = input;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="AirMedia\AirMediaPropertiesConfig.cs" />
|
||||
<Compile Include="AirMedia\AirMediaController.cs" />
|
||||
<Compile Include="Chassis\DmpsDigitalOutputController.cs" />
|
||||
<Compile Include="Chassis\DmpsMicrophoneController.cs" />
|
||||
<Compile Include="Chassis\DmBladeChassisController.cs" />
|
||||
<Compile Include="Chassis\DmCardAudioOutput.cs" />
|
||||
|
||||
Reference in New Issue
Block a user